Nginx 日志不记录访问通常不是“Nginx 坏了”,而是配置或请求本身被过滤掉了。下面按最常见原因 → 排查方法给你一个系统性的清单。
access_log 被关闭或指向 /dev/nullaccess_log off;
或
access_log /dev/null;
✅ 检查:
grep -R access_log /etc/nginx/
access_log /var/log/nginx/access.log;
但:
✅ 检查:
ls -ld /var/log/nginx
ps -ef | grep nginx # 看 worker 用户
✅ 修复:
mkdir -p /var/log/nginx
chown -R nginx:nginx /var/log/nginx
location 但没有 access_loglocation / {
proxy_pass http://backend;
# 没写 access_log
}
✅ 解决:
access_log /var/log/nginx/access.log;
✅ 本机测试:
curl -v http://127.0.0.1
如果本地能记录,外部不能 → 网络层问题
return / deny / rewrite 提前结束location / {
return 444;
}
或
deny all;
✅ 这类请求可能不写 access_log
location /health {
access_log off;
}
proxy_cache;
access_log off;
这类请求:
✅ 查看:
tail -f /var/log/nginx/error.log
http {
log_format main '$remote_addr $request';
access_log /var/log/nginx/access.log main;
}
✅ 确认:
nginx -T | grep log_format
# 1. 配置是否正确
nginx -t
# 2. 是否真的有 access_log
grep -R access_log /etc/nginx/
# 3. 日志目录权限
ls -ld /var/log/nginx
# 4. 是否有请求进来
tail -f /var/log/nginx/access.log
# 5. 本机测试
curl -v http://127.0.0.1
server {
listen 80;
server_name _;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
return 200 "ok\n";
}
}
你可以直接贴:
我可以直接告诉你哪一行导致不记录 ✅