nginx不会将错误logging到日志文件中

我最近把我的CentOS 7机器从Apache移到了nginx上,而我仍然在研究这些差异。 我只注意到我的一个服务器块的一个问题是,访问和错误日​​志文件实际上并没有被logging到,使得难以排除潜在的问题。

我的站点的服务器块如下所示:

server { listen 80; server_name example.com; root /var/www/example.com/public_html; index index.php; access_log /var/www/example.com/logs/example.com_access.log; error_log /var/www/example.com/logs/example.com_error.log error; location / { index index.php index.html; } location /reports { autoindex on; } location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } error_page 404 /var/www/html/404.html; error_page 500 502 503 504 /var/www/html/50x.html; location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { expires max; log_not_found off; } location /robots.txt { #access_log off; #log_not_found off; } location ~ /\.ht { deny all; } } 

我不确定为什么日志不会被保留。 我比较了我的服务器块的文件权限,他们都共享相同的权限。

 -rw-r--r--. 1 nginx root 0 Nov 7 02:54 example.com_access.log -rw-r--r--. 1 nginx root 0 Nov 7 02:54 example.com_error.log 

什么可能是为什么日志没有被存储的问题?

Nginx的语法在这里是正确的,所以这个问题与服务器环境有关。 这里有一些你可以做的事情来debugging它。

  1. 模拟Web服务器将会做什么。 尝试使用Web服务器将使用的相同用户写入文件。 如果Web服务器用户是nginx,那么以root身份尝试: su -m nginx -c 'echo "testing">>/var/www/example.com/logs/example.com_error.log'

  2. 观看networking服务器正在做什么。 作为临时debugging措施,在Nginxconfiguration的顶层daemon off添加daemon off 。 然后停止Nginx,并开始使用它 strace nginx | tee nginx-output.txt 。 然后它将在前台运行,并将所有系统调用发送到STDOUT,这也将在nginx-output.txt中捕获。 做一些事情来触发错误,然后你可以停止Nginx,删除“守护程序”行,并在您查看debugging日志时正常启动它。 在其中search提及有问题的文件名称。 也许你会在那里find它,从系统调用返回的错误试图访问该文件。

另一种可能是你不同意Nginx关于应该出现在错误日志中的内容。 如果nginx -V | grep debug nginx -V | grep debug得到一个结果,那么你可以改变最后一个参数error_logerror debug 。 重新加载Nginx并点击域中不存在的URL,这应该会产生大量的日志logging。 完成后closuresdebug日志logging。