Nginx 日志空白(不写日志或日志文件大小为 0)是比较常见的问题,通常由以下几类原因导致。你可以按顺序排查:
access_log / error_log检查对应 server 或 http 块中是否显式关闭了日志:
access_log off;
error_log off;
或者根本没有写日志指令。
✅ 解决:确保有类似配置
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
如果目录不存在,Nginx 启动时可能不报错但也不写日志。
ls -ld /var/log/nginx
✅ 解决:
mkdir -p /var/log/nginx
chown -R nginx:nginx /var/log/nginx
修改配置后未执行:
nginx -s reload
Nginx worker 进程通常以 nginx 或 www-data 运行:
user nginx;
如果日志目录属主不对:
ps -ef | grep nginx
✅ 解决:
chown nginx:nginx /var/log/nginx/*.log
chmod 644 /var/log/nginx/*.log
即使权限正确,SELinux 也会阻止写日志。
检查:
getenforce
✅ 临时解决:
setenforce 0
✅ 永久解决:
setsebool -P httpd_can_network_connect 1
restorecon -Rv /var/log/nginx
✅ 验证:
curl http://127.0.0.1
请求没命中 server,落到默认 server,但默认 server 没开日志。
✅ 解决:
default_serverNginx 默认可能启用了日志缓冲:
access_log /var/log/nginx/access.log buffer=32k;
低流量时日志不会立即写入。
✅ 验证:
nginx -s reload
# 等一会儿或发大量请求
error_log /var/log/nginx/error.log crit;
✅ 改为:
error_log /var/log/nginx/error.log warn;
systemctl status nginx
# 1. 配置是否正确
nginx -t
# 2. 是否启用日志
grep access_log /etc/nginx/nginx.conf
grep error_log /etc/nginx/nginx.conf
# 3. 目录权限
ls -l /var/log/nginx
# 4. 进程用户
ps -ef | grep nginx
# 5. 实际请求
curl http://127.0.0.1
如果你愿意,可以把:
nginx.conf 相关片段发给我,我可以帮你精准定位。