Вопрос или проблема
Я пытаюсь заставить nginx записывать журналы доступа и ошибок. В моих журналах в настоящее время очень старая информация, смесь обычных и сжатых журналов.
$ ls -la access*.log*
-rw-rw-rw- 1 nobody nogroup 0 Янв 8 2016 access.log
-rw-rw-rw- 1 nobody nogroup 2261400 Янв 7 2016 access.log.1
-rw-rw-rw- 1 nobody nogroup 311947 Дек 30 2015 access.log.10.gz
-rw-rw-rw- 1 nobody nogroup 434744 Дек 29 2015 access.log.11.gz
Моя конфигурация:
user www-data www-data;
error_log /var/log/nginx/error.log info;
...
http {
access_log /var/log/nginx/access.log combined;
...
Странно, но несмотря на декларацию user
, рабочие процессы все равно запускаются как nobody:
# ps -eo "%U %G %a" | grep nginx
root root nginx: master process /usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf
nobody nogroup nginx: worker process
nobody nogroup nginx: worker process
Я попытался установить владельцем существующих файлов access.log
и error.log
nobody:nogroup
, но ничего не изменилось.
В syslog
ничего (релевантного) нет.
Я пробовал разные (!) комбинации перезагрузки и перезапуска nginx после изменения конфигурационного файла. Все равно ничего…
В чем моя конфигурация неверна?
Вам стоит ознакомиться с этими темами для настройки пользователя nginx:
Как мне изменить пользователя NGINX?
почему процессы nginx работают под пользователем nobody
Что касается пустых журналов nginx, я предлагаю опустошить директорию журналов или временно отключить Selinux, чтобы убедиться, что это не вызывает проблемы setenrofce 0
Также вы можете проверить, правильна ли у вас синтаксис и находится ли директива error_log в правильном месте.
У меня была такая же проблема, и в конце концов я зашел в корневую папку и обнаружил, что там был другой файл access.log
, в другом месте, и именно в него производилась запись.
cd /
find . -name 'access.log'
Ответ или решение
Почему nginx не записывает логи и как это исправить
Ваша проблема с пустыми логами nginx может быть вызвана несколькими факторами. Давайте разберемся в деталях и предложим решения.
1. Проверка разрешений и владельцев файлов
Согласно вашим данным, вы установили владельца файлов логов на nobody:nogroup
, однако ваша конфигурация nginx указывает на пользователя www-data
. Измените владельца файлов логов на www-data:www-data
, чтобы обеспечить правильный доступ для записи:
sudo chown www-data:www-data /var/log/nginx/access.log /var/log/nginx/error.log
После изменения владельца проверьте разрешения на файлы:
sudo chmod 644 /var/log/nginx/access.log /var/log/nginx/error.log
2. Версия конфигурации nginx
Убедитесь, что конфигурация nginx действительно загружается правильно. Вы можете проверить синтаксис конфигурации с помощью команды:
sudo nginx -t
Убедитесь, что нет ошибок и конфигурация загружается без задержек.
3. Перезапуск службы
После изменения конфигурации обязательно перезапустите nginx. Используйте следующую команду, чтобы перезапустить службу:
sudo systemctl restart nginx
или, если вы используете OpenResty:
sudo /usr/local/openresty/nginx/sbin/nginx -s reload
4. SELinux и AppArmor
Если вы используете SELinux или AppArmor, они могут блокировать доступ к логам. Попробуйте временно отключить SELinux:
sudo setenforce 0
Для проверки состояния SELinux используйте:
sestatus
Если система работает под управлением AppArmor, убедитесь, что его профили не блокируют доступ к логированию в nginx
.
5. Переполнение логов
Если вы видите, что лог-файлы существуют, но вы ничего не получаете в новых записях, возможно, ваш лог-файл был переполнен или заблокирован. Попробуйте очистить файл:
sudo truncate -s 0 /var/log/nginx/access.log
sudo truncate -s 0 /var/log/nginx/error.log
6. Другие экземпляры nginx или конфликты конфигурации
Существует вероятность, что у вас есть другой экземпляр nginx, который конфликтует с настройками. Проверьте, если есть другие процессы:
ps -eo "%U %G %a" | grep nginx
Если вы видите, что есть другие процессы, возможно, они пишут в другие логи. Найдите все файлы access.log
с помощью команды:
find / -name 'access.log'
Это поможет определить, если есть другие местоположения, где могли бы храниться логи.
Заключение
После выполнения всех вышеуказанных шагов вы должны получить работающие логи nginx. Убедитесь, что конфигурация корректна, проверьте разрешения и владельца файлов, а также убедитесь, что нет мешающих процессов. Если вы продолжаете сталкиваться с трудностями, рассмотрите возможность изучения системных журналов или текущих настроек сервера, чтобы выявить дополнительные проблемы.