Ошибки nginx: все сообщения и что они значат
Введите на сервере sudo nginx -t: команда покажет текст ошибки, файл и номер строки. Найдите начало этого текста в таблицах и откройте разбор — в нём по шагам, что исправить.
Содержание 10
Как увидеть ошибку
Ошибки в настройках nginx показывает команда проверки. Все команды на этой странице вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне.
sudo nginx -tЕсли настройки в порядке, ответ будет таким:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulЕсли в настройках ошибка, nginx выведет строку с ней, а последней строкой — test failed:
2026/10/09 12:00:00 [emerg] 2345#2345: unknown directive "servr_name" in /etc/nginx/sites-enabled/example.com:4
nginx: configuration file /etc/nginx/nginx.conf test failedЧто есть в строке с ошибкой:
2026/10/09 12:00:00— дата и время;[emerg]— с такой ошибкой nginx работать не будет. Если вместо этого стоит[warn], это предупреждение: nginx запустится, но часть настроек будет работать не так, как вы задумали;2345#2345— номер процесса, для поиска ошибки он не нужен;- дальше текст ошибки — его ищите в таблицах ниже;
in /etc/nginx/sites-enabled/example.com:4— файл и номер строки, где nginx заметил ошибку. У части сообщений файла и строки нет — тогда в разборе сказано, где искать.
Дата, время и номер процесса у вас будут свои. В других сборках nginx та же строка начинается со слов nginx: [emerg].
Если nginx не запускается
Если ошибку вывела команда sudo systemctl start nginx или sudo systemctl restart nginx, в ответе будет только Job for nginx.service failed — без причины. Сначала введите sudo nginx -t. Если проверка прошла, а nginx всё равно не запускается, посмотрите последние строки журнала ошибок:
sudo tail -n 20 /var/log/nginx/error.logСамая нижняя строка — самая свежая. Найдите текст после [emerg] в таблицах ниже.
Какой файл открывать
В Ubuntu файлы сайтов хранятся в папке /etc/nginx/sites-available/, а в папке /etc/nginx/sites-enabled/ лежат ссылки на них: так nginx узнаёт, какие сайты включены. Поэтому путь в сообщении об ошибке ведёт в sites-enabled, а править нужно оригинал. Посмотрите, что лежит в sites-enabled:
ls -l /etc/nginx/sites-enabled/total 0
lrwxrwxrwx 1 root root 34 Oct 9 12:00 default -> /etc/nginx/sites-available/default
lrwxrwxrwx 1 root root 38 Oct 9 12:00 example.com -> /etc/nginx/sites-available/example.comСтрелка -> значит, что это ссылка, а справа от стрелки — путь к настоящему файлу. Его и открывайте. Если стрелки у файла нет, это сам файл — открывайте его по пути из сообщения.
Откройте файл из сообщения сразу на нужной строке: число после знака + — номер строки из сообщения, путь — тот, что стоит перед двоеточием.
sudo nano -l +4 /etc/nginx/sites-available/example.comКлюч -l включает номера строк слева, +4 ставит курсор сразу на строку 4. Сохранить файл — Ctrl+O и Enter, выйти — Ctrl+X. Подробнее о редакторе — в разделе про nano.
Номер строки — место, где nginx заметил ошибку. Если строка выглядит правильно, посмотрите строку выше: забытая точка с запятой в конце одной строки даёт ошибку на следующей.
После правки проверьте настройки ещё раз командой sudo nginx -t. Когда в ответе будут слова syntax is ok и test is successful, примените их:
sudo systemctl reload nginxЕсли команда ничего не ответила, настройки применены.
Ошибки в тексте настроек
| Сообщение | Что значит |
|---|---|
| unknown directive | nginx не знает такого слова: опечатка, строка из настроек Apache или модуль не установлен |
| directive is not allowed here | Директива стоит не в том блоке — например, location вне server |
| unexpected end of file, expecting "}" | Не хватает закрывающей фигурной скобки |
| unexpected "}" | Лишняя скобка или забыта точка с запятой перед ней |
| directive … is not terminated by ";" | Забыта точка с запятой перед строкой с открывающей скобкой |
| directive … has no opening "{" | После location или server нет открывающей скобки |
| invalid number of arguments | У директивы больше или меньше значений, чем нужно |
| invalid parameter | В строке listen лишнее слово — забыта точка с запятой |
Имена сайтов и порты
| Сообщение | Что значит |
|---|---|
| bind() to 0.0.0.0:80 failed (98: Address already in use) | Порт занят другой программой — Apache, контейнером Docker или второй копией nginx |
| still could not bind() | То же: nginx так и не смог занять порт |
| conflicting server name | Одно имя сайта стоит в двух блоках server — это предупреждение |
| could not build server_names_hash | Длинное имя сайта — нужно увеличить server_names_hash_bucket_size |
| a duplicate default server | Два блока server с default_server на одном порту |
| a duplicate listen | Одинаковая строка listen дважды в одном блоке server |
| duplicate location | Два одинаковых location в одном блоке server |
HTTPS и сертификаты
| Сообщение | Что значит |
|---|---|
| cannot load certificate | Файла сертификата или ключа нет по указанному пути, или его не прочитать |
| no "ssl_certificate" is defined for the "listen ... ssl" directive | В блоке есть listen 443 ssl, а строки ssl_certificate нет |
| key values mismatch | Сертификат и ключ — от разных пар |
Запуск, файлы и права
| Сообщение | Что значит |
|---|---|
| Job for nginx.service failed | nginx не запустился — причина в другом сообщении, разбор подскажет, где его найти |
| host not found in upstream | В proxy_pass имя, которого сервер не знает |
| open() … failed (2: No such file or directory) | Нет файла или папки из настроек |
| open() "/run/nginx.pid" failed (13: Permission denied) | Команда nginx -t запущена без sudo |
Ошибки, которые видны в браузере
Если nginx работает, а сайт открывается с ошибкой, смотрите разборы кодов ответа:
| Что видно в браузере | Что значит |
|---|---|
| 502 Bad Gateway | nginx не получил ответа от программы сайта |
| 504 Gateway Timeout | Программа сайта отвечает слишком долго |
| 403 Forbidden | nginx не может или не должен показывать эту страницу |
| 404 Not Found | Нет такой страницы или файла |
| 413 Request Entity Too Large | Загружаемый файл больше, чем разрешено |
| ERR_CONNECTION_REFUSED | Браузер не смог подключиться — nginx не запущен или порт закрыт |
Откуда тексты
Тексты сообщений сверены с исходным кодом nginx 1.24.0 — эта версия стоит в Ubuntu 24.04. В других версиях слова могут немного отличаться, но начало сообщения и смысл те же.
Источники
- Исходный код nginx 1.24.0: ngx_conf_file.c — как nginx читает файл настроек и тексты ошибок.
- Исходный код nginx 1.24.0: ngx_http.c — сообщения о дублях и конфликтах имён.
- Файл nginx.conf из пакета nginx в Ubuntu 24.04 — какие папки подключает nginx и где журнал ошибок.
- Как nginx собран в Ubuntu 24.04: файл debian/rules — куда nginx в Ubuntu пишет ошибки при проверке.
- man ls — что показывает ls -l.
- Справка nano — ключ -l и открытие файла на нужной строке.
Сверено 9–10 октября 2026 года.
Что почитать дальше
- Как разместить сайт на VPS: nginx с нуля — как создать файл сайта и включить его.
- Где смотреть ошибки nginx — журналы nginx.
- Бесплатный SSL-сертификат — как выпустить сертификат для HTTPS.
- Как настроить VPS с нуля — с чего начать работу с новым сервером.
- Ошибки apt и sudo — если nginx не ставится.
Проверено и обновлено: 10.10.2026