Nginx无法写入access.log

时间:2012-03-04 06:40:42

标签: linux nginx amazon-ec2 logfile

当nginx启动时,它会创建0大小的日志文件“access.log”。但是没有写入日志。 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 {}部分不起作用?

4 个答案:

答案 0 :(得分:17)

根据您的配置,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日志可以在logrotate cronjob达到一定大小后旋转。创建新日志文件时,应使用所有者,组和权限创建它,以允许nginx工作进程写入它。

nginx的这些日志轮换设置在/etc/logrotate.d/nginx中定义

另见log rotation guide for ubuntu

答案 1 :(得分:7)

我有一个类似的问题,访问日志文件没有被写入,但错误日志文件工作正常。权限也适合我。我通过强制nginx进程使用

重新加载日志文件来解决自己的问题
kill -USR1 `cat /var/run/nginx.pid`

其中/var/run/nginx.pid是nginx PID文件的路径

答案 2 :(得分:1)

您必须将用户和组nginx绑定到日志文件。

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

你能发布完整的nginx.conf吗?以pastebin为例?

编辑:在每个部分中,您必须定义关键字,例如“combined”!

答案 3 :(得分:0)

我遇到的一种情况是磁盘已满