nginx 日志“不记录”通常不是 nginx 本身坏了,而是配置或环境导致日志没有生成/写入。下面按最常见原因 → 排查方法给你一个系统性的说明。
access_log / error_log 没配置或配置错误nginx 不会自动记录日志,必须显式配置。
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;
}
✅ 如果某层被关闭了,就会不记录:
access_log off;
nginx 不会自动创建目录
/var/log/nginx/ # 不存在
ls -ld /var/log/nginx
ps aux | grep nginx # 看 worker 进程用户(通常是 www-data / nginx)
mkdir -p /var/log/nginx
chown -R nginx:nginx /var/log/nginx
chmod 755 /var/log/nginx
你可能以为请求命中了某个 server,但实际上没有。
server {
listen 80;
server_name _;
return 444; # 测试是否命中
}
或:
nginx -T | grep server_name
location 规则拦截(尤其是 API / 静态资源)例如:
location /api/ {
proxy_pass http://backend;
access_log off; # 这里关了
}
✅ 检查所有 location 是否关闭了日志。
以下情况不会记录或记录不完整:
return 301 https://example.com;
return 444;
或:
error_page 404 = /404.html;
✅ 这类请求通常只进 error_log,甚至不进 access_log
error_log /var/log/nginx/error.log crit;
✅ 只看 crit 以上,info / warn 不会记录
error_log /var/log/nginx/error.log debug;
⚠️ 生产环境慎用 debug
ls -lh /var/log/nginx/access.log
如果文件大小为 0 或不存在,可能是:
✅ 修复:
nginx -s reload
getenforce
如果是 Enforcing,可能需要:
setenforce 0
# 1. 检查配置
nginx -t
# 2. 查看是否配置日志
nginx -T | grep access_log
nginx -T | grep error_log
# 3. 查看目录和权限
ls -ld /var/log/nginx
ps aux | grep nginx
# 4. 测试请求
curl -v http://localhost
# 5. 查看日志
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log
events {}
http {
error_log /var/log/nginx/error.log info;
access_log /var/log/nginx/access.log;
server {
listen 80;
server_name _;
location / {
return 200 "ok\n";
}
}
}
你可以直接贴出:
nginx -T 输出(或关键 server 段)我可以直接告诉你哪一行导致日志不记录。