Nginx не может записать в access.log - PullRequest
20 голосов
/ 04 марта 2012

При запуске nginx создается файл журнала «access.log» с размером 0. Но в нем нет логов. error.log отлично работает.

nginx.conf:

http {
    access_log /usr/local/webserver/nginx/logs/access.log combined;
    ....
}

Файл журнала:

-rw-r--r--  1 root root    0 Mar  4 00:54 access.log
-rw-r--r--  1 root root 3903 Mar  4 00:54 error.log

Я полностью сбит с толку. @ _ @

Это проблема с разрешением?

Однако в более поздней части nginx.conf, в разделе server {}, access_log работает! Почему раздел http {} не работает?

Ответы [ 3 ]

19 голосов
/ 20 марта 2014

В зависимости от вашей конфигурации главный процесс nginx и рабочие процессы могут запускаться от имени разных пользователей.

Чтобы просмотреть пользователей и группы для процессов nginx:

ps -eo "%U %G %a" | grep nginx

root     root     nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
www-data www-data nginx: worker process

Пользователю рабочего процесса требуется записьразрешение на файл журнала.

Чтобы просмотреть права доступа к файлу access.log:

ls -l /var/log/nginx/access.log
-rw-r----- 1 www-data www-data 0 Apr 29  2012 /var/log/nginx/access.log

В этом случае журнал доступа принадлежит рабочему процессу nginx и имеет доступ на запись.

См. Такжеnginx http_log_module документы.

В качестве вторичной проблемы, журналы nginx могут вращаться, как только они достигают определенного размера с помощью cronjob logrotate.Когда создается новый файл журнала, он должен быть создан с владельцем, группой и разрешениями, чтобы рабочий процесс nginx мог писать в него.

Эти параметры ротации журнала для nginx определены в /etc/logrotate.d/ nginx

См. также руководство по ротации журналов для Ubuntu .

8 голосов
/ 25 мая 2016

У меня была похожая проблема, когда файл журнала доступа не записывался, но файл журнала ошибок работал нормально.Разрешения также были хороши для меня.Я получил это, чтобы исправить себя, заставляя процесс nginx перезагружать файлы журнала, используя

kill -USR1 `cat /var/run/nginx.pid`

, где /var/run/nginx.pid - это путь к вашему PID-файлу nginx

2 голосов
/ 04 марта 2012

Вы должны связать пользователя и группу nginx с вашими лог-файлами.

chown nginx:nginx access.log
chown nginx:nginx error.log

Можете ли вы опубликовать свой полный файл nginx.conf? С пастином например?

РЕДАКТИРОВАТЬ: в каждом разделе вы должны определить ключевое слово как «комбинированный»!

...