当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 {}部分不起作用?
答案 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中定义
答案 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)
我遇到的一种情况是磁盘已满