我最近将我的CentOS 7机器从Apache移到了Nginx,我仍在研究这些差异.我只注意到一个服务器块的一个问题是访问和错误日志文件实际上没有被记录,因此很难解决潜在的问题.
我的网站的服务器块如下所示:
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语法是正确的,因此问题与服务器环境有关.以下是一些可以调试它的方法.
>模拟Web服务器将要执行的操作.尝试使用Web服务器将使用的同一用户写入文件.如果Web服务器用户是Nginx,那么以root身份尝试:
su -m Nginx -c’echo“testing”>> /var/www/example.com/logs/example.com_error.log’
>观察Web服务器正在做什么.作为一个临时的调试措施,在你的Nginx配置的顶层添加daemon off
.然后停止Nginx并从它开始strace Nginx | tee Nginx-output.txt.然后它将在前台运行并将它对STDOUT进行的所有系统调用喷出,这也将在Nginx-output.txt中捕获. Do Something触发错误,然后您可以停止Nginx,删除“守护进程”行并在查看调试日志时正常启动它.在其中搜索有关文件名的提及.也许你会在那里找到它,系统调用返回的错误试图访问该文件.
另一种可能性是你不同意Nginx关于应该出现在错误日志中的内容.如果是Nginx -V | grep debug获取结果,然后您可以将error_log的最后一个参数从error更改为debug.重新加载Nginx并点击域中不存在的URL,这应该会生成大量日志记录.完成后关闭调试日志记录.