#Что означает и когда возникает ошибка
Успешный nginx -t подтверждает синтаксис только прочитанных файлов: он не означает, что нужный файл вообще включён. До перезапуска выясните, какая именно конфигурация загружена, особенно на сервере с панелью хостинга.
#Причины и как их различить
| Возможная причина | Как узнать | Что делать |
|---|---|---|
Маска include не совпадаетДиректива содержит *.conf, а файл сохранён без .conf или в другой папке. | Файл существует, но его содержание отсутствует в nginx -T. | Исправить имя/путь или маску include по согласованной структуре. |
| Редактируется не тот экземпляр NginxВ системе несколько Nginx, контейнер или панель генерирует собственный конфиг. | Путь nginx -V/командной строки службы отличается от редактируемого файла. | Определить активный -c и реальный путь генерации. |
| Reload не состоялся либо файл перегенерированПосле правки не выполнялся тест/перечитывание, либо панель восстановила исходный файл. | Изменение видно в исходном файле, но нет в активной конфигурации или исчезает. | Исправить источник конфигурации, затем test/reload. |
#Пошаговая диагностика и исправление
- Убедитесь, какой Nginx обслуживает доменПроверьте по безопасному тестовому запросу фактический IP сервера и режим размещения сайта (параметры панели, контейнер либо системная служба). На сервере по SSH выполните
ps -ef | grep "nginx: master"иsudo systemctl status nginx --no-pager. Если служба в контейнере или под другим именем, системный nginx может быть не тем, который отвечает клиенту. Не перезапускайте его, пока не установите владельца процесса. - Посмотрите включённые директивы и путь конфигурацииВыполните
sudo nginx -Tна том же экземпляре, который обслуживает сайт. Вывод покажет загруженные файлы с комментариями# configuration file ...:. Найдите имя ожидаемого файла и изменённую директиву, сверив её с местом в реальном файле. Если отсутствует, проверьте строкиincludeи расширение файла;nginx -tне обнаружит ошибку в файле, который вообще не подключён. - Разберите относительные пути и шаблоныУ
includeмогут быть абсолютные пути и шаблоны, напримерinclude /etc/nginx/conf.d/*.conf;; относительно заданные пути определяются префиксом конфигурации Nginx. Проверьтеnginx -Vи параметры запуска, прежде чем исправлять путь. Не добавляйте случайно второй include на ту же папку: возможны дублиserverи конфликтlisten. - Исправьте источник, а не автоматически генерируемый результатЕсли файл создаёт панель хостинга, изменяйте её шаблон или штатную настройку сайта, а не копию в служебной папке, которую панель перезапишет. Если это ваша обычная структура, сделайте копию главного конфигурационного файла и исправьте путь/маску include или переименуйте целевой файл в ожидаемое расширение. Не подключайте каталоги, куда могут записывать непроверенные пользователи.
- Проверьте синтаксис и примените без остановкиЗапустите
sudo nginx -t; успешные строки включаютsyntax is okиtest is successful(формулировка может зависеть от сборки). Лишь после успеха выполнитеsudo systemctl reload nginx. Если reload вернул ошибку, смотритеsudo journalctl -u nginx -n 50 --no-pager. Не используйте restart для простого перечитывания без необходимости. - Убедитесь, что новый файл реально применяетсяПовторите
sudo nginx -T, найдите новый путь и изменённый параметр. Затем выполните контрольный HTTP-запрос к домену и убедитесь в ожидаемом поведении. Если после обновления панели всё откатывается, верните резервную конфигурацию и перенесите настройку в правильный управляемый источник. Не проверяйте результат только по дате изменения файла. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
#Проверка результата
Успех: nginx -T показывает нужный файл и корректную директиву, HTTP-тест отражает изменение после reload, а конфигурация не исчезает после операций панели.
#Если проблема осталась
Сохраните дату, точный URL без паролей и токенов, код ответа, обезличенные строки error.log и access.log за это время и перечень уже сделанных изменений. Сравните работу при обращении через публичный адрес и через внутренний балансировщик, если он есть. Если причину пока не удалось подтвердить, восстановите исходную конфигурацию из копии и передайте эти сведения администратору или разработчику приложения; не меняйте несколько параметров одновременно.