#Симптом и границы применимости
Пользователь видит ошибку на странице, но строки о запросе нет в ожидаемом access.log. Возможны отдельный виртуальный хост, отключённая запись, буферизация или ошибка на внешнем узле до Nginx.
#Возможные причины и как их отличить
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Журнал другой площадкиNginx ведёт несколько журналов, а панель может показывать один. | В nginx -T другой access_log для location/server | Найти эффективную директиву |
| Логирование отключено или отфильтрованоНекоторые запросы не записываются намеренно. | access_log off или if=условие в конфигурации | Проверить настройки сбора |
| Ошибка возникла до NginxОтвет мог сформировать промежуточный узел. | Во внешнем прокси есть запись, а у Nginx её нет | Проверить CDN/LB и сетевой маршрут |
#Пошаговая диагностика и исправление
- Зафиксируйте время и тип ошибкиПопросите пользователя сообщить точное время, адрес без токенов, HTTP-код и снимок сообщения. Сами сделайте один тестовый запрос из терминала; добавьте в URL безопасный параметр поиска test-log=... только если приложение допускает параметр, иначе используйте уже существующий путь.
- Проверьте попадание на NginxС компьютера выполните запрос с curl и запомните дату и HTTP-код; строка Server сама по себе не доказывает, где возникла ошибка. Если запрос проходит через CDN/балансировщик, найдите его журналы за тот же интервал.Linux · Терминал (Bash)КомандаЗапрос не меняет конфигурацию; для некоторых приложений HEAD отличается от GET.
curl -I https://example.com/
- Найдите все эффективные директивы access_logПодключитесь по SSH и выполните nginx -T. Проверьте server и завершающий обработку location для данного URL: access_log может быть переопределён внутри location. Особенно ищите access_log off, параметр if= и запись в syslog. Не ограничивайтесь /var/log/nginx/access.log.Linux · Терминал (Bash)КомандаНужен sudoРезультат безопаснее просматривать локально, без публикации секретов.
sudo nginx -T 2>&1 | grep -nE "access_log|log_format|server_name|error_log"
- Проверьте буферизацию и праваЕсли access_log настроен с buffer= или flush=, записи появляются не обязательно сразу. Посмотрите наличие файла и время изменения, не создавая и не обнуляя его. Если в error_log есть ошибки записи, проверьте права пользователя рабочих процессов и свободное место.
- Пример типичного пути; действительный путь возьмите из nginx -TLinux · Терминал (Bash)КомандаНужен sudoПример типичного пути; действительный путь возьмите из nginx -T.
sudo ls -l /var/log/nginx/df -h /var/log
- Сравните с журналом ошибокДля даты жалобы проверьте error_log и systemd-journal; ошибки соединения или TLS могут возникнуть до записи HTTP-запроса. Если хостинг-панель показывает события в другом журнале, проверьте формат и задержку её обновления.
- Содержимое журнала может включать чувствительные адреса и заголовкиLinux · Терминал (Bash)КомандаНужен sudoСодержимое журнала может включать чувствительные адреса и заголовки.
sudo journalctl -u nginx -n 60 --no-pager
- Восстановите запись только там, где она нужнаЕсли access_log off ошибочно стоит в нужном location, сохраните копию конфигурации и согласуйте включение записи с учётом персональных данных. Проверьте синтаксис и перечитайте Nginx. Если ошибку выдаёт CDN, настройте наблюдение на нём, а не включайте бессмысленные журналы на origin.
- Перед перечитыванием сохраните файл и проверьте влияние на место дискаLinux · Терминал (Bash)С осторожностьюНужен sudoПеред перечитыванием сохраните файл и проверьте влияние на место диска.
sudo nginx -tКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
#Как проверить результат
Сделайте один контролируемый запрос к известному URL и убедитесь, что соответствующая строка появилась в выбранном журнале (с учётом flush). Сопоставьте код ответа в журнале с тем, который видит пользователь.
#Если проблема не устранена
Если строки по-прежнему нет, разберите DNS, IPv4/IPv6, балансировщик и другой Nginx-контейнер. Не отключайте буферизацию и не включайте детальное логирование всех пользовательских данных без необходимости.