Nginx 日志“不全”是一个比较常见的现象,通常不是 Nginx 本身丢了日志,而是配置、缓冲、权限或理解偏差导致的。下面按常见原因系统梳理一下。
Nginx 默认对访问日志有缓冲,不是每条请求立刻写盘。
access_log /var/log/nginx/access.log main buffer=32k flush=5s;
buffer=32k:攒够 32k 才写flush=5s:最多 5 秒写一次后果:
✅ 排查:
nginx -T | grep access_log
error_log /var/log/nginx/error.log warn;
warn 以上才会记录info、notice 不会写常见“看不到日志”的情况:
return 403 但没报错✅ 建议排查时临时改:
error_log /var/log/nginx/error.log debug;
以下情况不会写 access_log:
return 提前拦截location /health {
return 200;
}
(会记,但容易误以为没记)
error_page + 内部跳转有时只记最终状态
deny 直接拒绝(部分版本不记)deny 1.2.3.4;
server {
access_log /var/log/nginx/a.log;
}
server {
access_log off;
}
或:
location /api {
access_log off;
}
✅ 检查:
nginx -T | grep -E "access_log|error_log"
常见现象:
.gz✅ 检查:
ls -lh /var/log/nginx/
Nginx worker 用户写不了日志目录:
ps aux | grep nginx
常见:
nginx 用户root✅ 修复:
chown -R nginx:nginx /var/log/nginx
chmod 755 /var/log/nginx
access_log syslog:server=127.0.0.1:514;
此时:
✅ 检查:
nginx -T | grep syslog
journalctl -u nginx
✅ 查看:
docker logs <container>
kubectl logs <pod>
# 1. 看配置
nginx -T | grep -E "access_log|error_log"
# 2. 看文件
ls -lh /var/log/nginx/
# 3. 看进程用户
ps aux | grep nginx
# 4. 看实时日志
tail -f /var/log/nginx/access.log
# 5. 临时 debug
error_log /var/log/nginx/error.log debug;
你可以贴:
nginx -T 中相关 log 配置我可以直接帮你定位是哪一类问题。