Nginx не может записывать в access.log

Когда 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 {} раздел не работает?

Ответы

Ответ 1

В зависимости от вашей конфигурации основные процессы и рабочие процессы 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 docs.

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

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

См. также руководство по вращению журнала для ubuntu.

Ответ 2

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

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

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

Ответ 3

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

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

Можете ли вы разместить свой полный nginx.conf? Например, с пастебином?

EDIT: в каждом разделе вы должны определить ключевое слово как "комбинированное"!