Поиск по сайту:

Как устранить распространенные ошибки Nginx


Введение

Существует несколько методов, которые вы можете использовать для устранения ошибок Nginx. Имейте в виду, что эти методы устранения неполадок предназначены в качестве отправной точки, и часто требуется дальнейшее исследование, чтобы диагностировать основную причину проблемы. По мере прохождения этого руководства ошибки сами по себе будут предоставлять ключевую информацию, которая приведет вас к решению.

В этом руководстве будут рассмотрены следующие команды, которые обычно используются для устранения неполадок Nginx в большинстве дистрибутивов Linux:

  • sudo cat /var/log/nginx/error.log: используется для печати журнала со списком ошибок и подробной информацией о них.
  • sudo nginx -t: используется для проверки синтаксических ошибок в файле конфигурации.
  • systemctl status nginx: используется для проверки активности вашей службы Nginx.

Вы узнаете больше об этих командах и о том, как их использовать для устранения различных ошибок Nginx.

Устранение неполадок с помощью журнала ошибок

Когда вы получаете сообщение об ошибке от Nginx, не всегда понятно, в чем может быть проблема. По этой причине одна ошибка может быть связана с более крупной проблемой или вообще с отдельной проблемой. Это зависит от ваших конкретных обстоятельств, настройка может отличаться. Чтобы получить полный обзор ошибок Nginx, выполните следующую команду, чтобы получить рабочий список:

  1. sudo cat /var/log/nginx/error.log

Вы должны запустить эту команду как привилегированный пользователь. Мы рекомендуем использовать пользователя с поддержкой sudo, а не пользователя root. Команда cat означает конкатенацию, которая используется для чтения содержимого файла и его вывода на выходе вашего терминала. В этом случае cat читает и печатает содержимое файла /var/log/nginx/error.log. Когда вы запустите эту команду, ваш вывод вернет список ошибок. Имейте в виду, что если ошибок нет, ваше приглашение останется пустым. Вот пример журнала ошибок:

2022/11/28 23:58:22 [emerg] 168641#168641: invalid host in "[::]443" of the "listen" directive in /etc/nginx/sites-enabled/test.do-community.com:12
2022/11/28 23:59:44 [emerg] 168664#168664: invalid number of arguments in "root" directive in /etc/nginx/sites-enabled/test.do-community.com:4
2022/11/29 00:00:19 [emerg] 168701#168701: "server" directive is not allowed here in /etc/nginx/sites-enabled/test.do-community.com:6

Этот вывод журнала ошибок содержит ключевую информацию о конкретной ошибке, с которой вы столкнулись. В первой части этого элемента журнала указаны дата и время возникновения ошибки, а также тип сообщения об ошибке. В данном случае это сообщение [emerg] или экстренное сообщение. Последний компонент элемента журнала состоит из самого сообщения об ошибке и, если применимо, файла и конкретной строки, в которых оно может быть найдено.

В целом, просмотр журнала ошибок Nginx полезен, если вы хотите получить больше информации об ошибках, которые вы можете получить.

Проверка синтаксических ошибок

Одна из наиболее распространенных ошибок Nginx связана с синтаксисом в вашем файле конфигурации. Будь то пропущенные символы или неправильная структура синтаксиса, если синтаксис неверен, это не сработает. Это связано с тем, что файл конфигурации состоит из различных директив и должен быть объявлен правильно, иначе они будут недействительными. Чтобы проверить наличие синтаксических ошибок, выполните следующую команду:

  1. sudo nginx -t

Эта команда должна выполняться привилегированным пользователем, мы рекомендуем пользователю с поддержкой sudo, а не пользователю root. Кроме того, флаг t означает, что это проверит файл перед его фактическим запуском. Если ваш синтаксис правильный, вы получите следующий вывод:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Если нет, вы получите сообщение об ошибке, похожее на примеры, которые мы публикуем в журнале ошибок. Вот что может вернуть ваш вывод, если есть синтаксическая ошибка:

[emerg] invalid host in "[::]443" of the "listen" directive in /etc/nginx/sites-enabled/test.do-community.com:12
nginx: configuration file /etc/nginx/nginx.conf test failed

Мы рекомендуем всегда запускать эту синтаксическую команду, чтобы убедиться, что в вашем файле конфигурации нет ничего пропущенного или недействительного. Кроме того, вы всегда должны запускать sudo systemctl reload nginx после внесения любых изменений в конфигурацию. Это перезапустит Nginx и применит все внесенные вами изменения.

Устранение неполадок с состоянием systemctl nginx

Другой вариант устранения ошибок Nginx — убедиться, что эта служба активна и работает в вашей системе. Возможно, установка была неполной, или служба не была включена. Вы можете проверить, активна ли ваша служба Nginx, с помощью следующей проверки состояния через систему инициализации systemd:

  1. systemctl status nginx

Если ваша служба запущена, она будет читаться как active (работает) в вашем выводе:

 nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enable>
     Active: active (running) since Tue 2022-11-29 16:37:49 UTC; 29s ago
       Docs: man:nginx(8)
    Process: 2679 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_proce>
    Process: 2680 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (c>
   Main PID: 2787 (nginx)
      Tasks: 2 (limit: 1116)
     Memory: 3.3M
        CPU: 32ms
     CGroup: /system.slice/nginx.service
             ├─2787 "nginx: master process /usr/sbin/nginx -g daemon on; master>
             └─2790 "nginx: worker process"

Если ваша служба не запущена, в выводе она будет считана как inactive (dead):

○ nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enable>
     Active: inactive (dead) since Tue 2022-11-29 16:42:27 UTC; 1s ago
   Duration: 4min 38.006s
       Docs: man:nginx(8)
    Process: 2679 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_proce>
    Process: 2680 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (c>
    Process: 2915 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/>
   Main PID: 2787 (code=exited, status=0/SUCCESS)
        CPU: 39ms

Если это произойдет, возможно, вам придется снова перезапустить службу Nginx. Вы можете сделать это с помощью следующей команды:

  1. sudo systemctl restart nginx

После этого вы можете запустить systemctl status nginx, чтобы убедиться, что ваша служба снова активна. Если вам интересно узнать больше об этих основных командах управления, прочитайте наш учебник, в котором мы обсуждаем, как управлять процессом Nginx.

Другие советы по устранению неполадок

Несмотря на то, что мы рассмотрели только три метода устранения ошибок Nginx, вот еще несколько примеров, относящихся к настройкам брандмауэра и конфигурации.

Настройка параметров брандмауэра

Когда вы настраиваете Nginx, ваш сервер по умолчанию использует порт 80 для HTTP-трафика. Если у вас не открыт этот порт для приема этих запросов, ваш сайт не будет работать должным образом. В зависимости от вашего дистрибутива настройка параметров брандмауэра может отличаться. В этом примере будет использоваться простой брандмауэр (ufw). Чтобы убедиться, что ваш порт открыт, вы можете проверить статус следующим образом:

  1. sudo ufw status

Опять же, вам нужен пользователь с привилегиями, и рекомендуется использовать пользователя с поддержкой sudo, а не пользователя root. Если ваш вывод возвращает следующее, это означает, что у вас открыт соответствующий порт 80, в частности, указан профиль Nginx HTTP:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx HTTP                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

Если вам нужно открыть дополнительные порты, такие как 443, чтобы разрешить HTTPS-трафик, вы можете добавить правило в список:

  1. sudo ufw allow 'Nginx HTTPS'

Кроме того, вы можете добавить оба правила с одним профилем Nginx Full:

  1. sudo ufw allow 'Nginx Full'

Чтобы убедиться, что ваши порты открыты, снова запустите sudo ufw status, и, если они есть в списке, вы готовы к работе. Вы также можете проверить свой веб-браузер, чтобы убедиться, что ваш сервер успешно запущен и работает.

Проверка файла конфигурации

Если вы используете веб-сервер Nginx, у вас, вероятно, настроен блок сервера, особенно если вы следовали нашему руководству по установке Nginx. Чтобы обслуживать желаемый HTML-контент, у вас должен быть настроен блок конфигурации для вашего сайта. Вот пример блока сервера с деталями конфигурации для вашего домена:

server {
       listen 80;
         listen [::]:80;

       root /var/www/your_domain/html;
        index index.html index.htm index.nginx-debian.html;

        server_name your_domain www.your_domain;

        location / {
                try_files $uri $uri/ =404;
        }
}

Когда вы добавляете или обновляете файл конфигурации, всегда не забывайте сохранять его, когда закончите. Если вы используете текстовый редактор nano, вы можете сделать это, нажав CTRL + X, Y, а затем ENTER. Основной способ устранить любые проблемы с файлом конфигурации — запустить проверку синтаксиса sudo nginx -t, упомянутую ранее, и включить эти изменения, перезапустив Nginx с помощью sudo systemctl restart nginx. .

Вы всегда можете оценить свой файл конфигурации, открыв его в предпочитаемом вами текстовом редакторе, например, в следующем:

  1. sudo nano /etc/nginx/sites-available/your_domain

Помните, что любые директивы, которые вы имеете или добавляете в этот файл, должны быть точными, иначе вы получите сообщение об ошибке.

Заключение

В этом руководстве содержится краткое справочное руководство по устранению распространенных ошибок, с которыми вы можете столкнуться при работе с Nginx. Как вы помните, эти команды обеспечивают первый шаг в диагностике проблемы, но вам может потребоваться более подробное изучение ошибки. Однако, если вы когда-либо сомневаетесь, вы всегда можете начать с проверки журнала ошибок Nginx для получения подробных записей о каждой ошибке. Если вас интересует более подробное объяснение некоторых распространенных ошибок Nginx, вы можете прочитать следующие руководства:

  • Распространенные синтаксические ошибки Nginx
  • Распространенные ошибки подключения Nginx
  • Сертификат Nginx SSL и ошибки перенаправления HTTPS