Nginx 日志不记录可能由多种原因导致,你可以按下面常见情况逐一排查。先给结论:最常见的是日志路径/权限问题、access_log 被关闭、请求没打到对应 server、或日志被重写/轮转异常。
http {
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
}
或 server / location 中:
server {
access_log /var/log/nginx/access.log;
}
ls -l /var/log/nginx/
tail -f /var/log/nginx/access.log
access_log off; 被设置如果某处配置了:
access_log off;
该 server / location 不会记录日志。
✅ 解决:
access_log /var/log/nginx/access.log;
例如:
http://localhostdefault_server✅ 排查:
nginx -T | grep server_name
✅ 建议:
server {
listen 80 default_server;
server_name _;
access_log /var/log/nginx/access.log;
}
Nginx 运行用户一般是:
ps aux | grep nginx
# 通常为 www-data 或 nginx
✅ 解决:
chown -R nginx:nginx /var/log/nginx
chmod -R 755 /var/log/nginx
✅ 或测试:
touch /var/log/nginx/access.log
例如:
location / {
if (...) {
return 444;
}
}
或:
location = /health {
access_log off;
}
✅ 解决:
例如:
✅ 排查:
curl -v http://your-domain/
error_log /var/log/nginx/error.log warn;
如果是 error 或 crit,低级别日志不会记录。
✅ 建议调试用:
error_log /var/log/nginx/error.log debug;
⚠️ 上线不要长期使用 debug
cat /etc/logrotate.d/nginx
如果日志被 rename 但 nginx 没 reload:
nginx -s reload
getenforce
如果是 Enforcing:
setenforce 0
或:
semanage fcontext -a -t httpd_log_t "/var/log/nginx(/.*)?"
restorecon -Rv /var/log/nginx
✅ 是否配置了 access_log
✅ 是否被 off
✅ 请求是否命中对应 server
✅ 日志目录权限
✅ nginx 是否已 reload
✅ 是否被 logrotate 影响
你可以直接贴出:
nginx -T 中相关 server 配置我可以一步一步帮你定位 为什么一条日志都没有。