27

当 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

4 回答 4

20

根据您的配置,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 中定义

另请参阅ubuntu 的日志轮换指南

于 2014-03-20T01:58:01.427 回答
8

我有一个类似的问题,访问日志文件没有被写入,但错误日志文件工作正常。权限对我来说也很好。我通过强制 nginx 进程使用重新加载日志文件来修复它自己

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

/var/run/nginx.pidnginx PID 文件的路径在哪里

于 2016-05-25T06:19:03.320 回答
3

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

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

您可以发布完整的 nginx.conf 吗?以 pastebin 为例?

编辑:在每个部分中,您必须定义“组合”之类的关键字!

于 2012-03-04T07:25:53.830 回答
0

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

于 2020-07-28T08:51:31.140 回答