Как устранить распространенные ошибки Nginx
Введение
Существует несколько методов, которые вы можете использовать для устранения ошибок Nginx. Имейте в виду, что эти методы устранения неполадок предназначены в качестве отправной точки, и часто требуется дальнейшее исследование, чтобы диагностировать основную причину проблемы. По мере прохождения этого руководства ошибки сами по себе будут предоставлять ключевую информацию, которая приведет вас к решению.
В этом руководстве будут рассмотрены следующие команды, которые обычно используются для устранения неполадок Nginx в большинстве дистрибутивов Linux:
sudo cat /var/log/nginx/error.log
: используется для печати журнала со списком ошибок и подробной информацией о них.sudo nginx -t
: используется для проверки синтаксических ошибок в файле конфигурации.systemctl status nginx
: используется для проверки активности вашей службы Nginx.
Вы узнаете больше об этих командах и о том, как их использовать для устранения различных ошибок Nginx.
Устранение неполадок с помощью журнала ошибок
Когда вы получаете сообщение об ошибке от Nginx, не всегда понятно, в чем может быть проблема. По этой причине одна ошибка может быть связана с более крупной проблемой или вообще с отдельной проблемой. Это зависит от ваших конкретных обстоятельств, настройка может отличаться. Чтобы получить полный обзор ошибок Nginx, выполните следующую команду, чтобы получить рабочий список:
- 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 связана с синтаксисом в вашем файле конфигурации. Будь то пропущенные символы или неправильная структура синтаксиса, если синтаксис неверен, это не сработает. Это связано с тем, что файл конфигурации состоит из различных директив и должен быть объявлен правильно, иначе они будут недействительными. Чтобы проверить наличие синтаксических ошибок, выполните следующую команду:
- 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
:
- 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. Вы можете сделать это с помощью следующей команды:
- sudo systemctl restart nginx
После этого вы можете запустить systemctl status nginx
, чтобы убедиться, что ваша служба снова активна. Если вам интересно узнать больше об этих основных командах управления, прочитайте наш учебник, в котором мы обсуждаем, как управлять процессом Nginx.
Другие советы по устранению неполадок
Несмотря на то, что мы рассмотрели только три метода устранения ошибок Nginx, вот еще несколько примеров, относящихся к настройкам брандмауэра и конфигурации.
Настройка параметров брандмауэра
Когда вы настраиваете Nginx, ваш сервер по умолчанию использует порт 80
для HTTP-трафика. Если у вас не открыт этот порт для приема этих запросов, ваш сайт не будет работать должным образом. В зависимости от вашего дистрибутива настройка параметров брандмауэра может отличаться. В этом примере будет использоваться простой брандмауэр (ufw). Чтобы убедиться, что ваш порт открыт, вы можете проверить статус следующим образом:
- 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-трафик, вы можете добавить правило в список:
- sudo ufw allow 'Nginx HTTPS'
Кроме того, вы можете добавить оба правила с одним профилем Nginx Full
:
- 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
. .
Вы всегда можете оценить свой файл конфигурации, открыв его в предпочитаемом вами текстовом редакторе, например, в следующем:
- sudo nano /etc/nginx/sites-available/your_domain
Помните, что любые директивы, которые вы имеете или добавляете в этот файл, должны быть точными, иначе вы получите сообщение об ошибке.
Заключение
В этом руководстве содержится краткое справочное руководство по устранению распространенных ошибок, с которыми вы можете столкнуться при работе с Nginx. Как вы помните, эти команды обеспечивают первый шаг в диагностике проблемы, но вам может потребоваться более подробное изучение ошибки. Однако, если вы когда-либо сомневаетесь, вы всегда можете начать с проверки журнала ошибок Nginx для получения подробных записей о каждой ошибке. Если вас интересует более подробное объяснение некоторых распространенных ошибок Nginx, вы можете прочитать следующие руководства:
- Распространенные синтаксические ошибки Nginx
- Распространенные ошибки подключения Nginx
- Сертификат Nginx SSL и ошибки перенаправления HTTPS