nginx 日志“不生效”通常并不是 nginx 本身坏了,而是配置没命中、路径/权限问题、或被其他配置覆盖。下面按最常见原因一步步排查。
| 现象 | 可能原因 |
|---|---|
| 完全没日志 | access_log 被 off |
| 有错误没访问日志 | 访问日志没配置 |
| 日志写到别的地方 | 被 server / location 覆盖 |
| 日志文件不增长 | 权限不足 / 磁盘满 |
| 改了不生效 | 没 reload nginx |
| docker 里看不到 | 日志进 stdout 了 |
nginx -t
nginx -s reload
⚠️ 改配置不 reload = 不生效
access_log off;
如果有这一行,访问日志直接不写。
✅ 正常应类似:
access_log /var/log/nginx/access.log;
http 里写了:
http {
access_log /var/log/nginx/access.log;
}
但 server 或 location 里又写了:
server {
access_log off;
}
✅ 解决:在对应 server / location 明确写:
access_log /var/log/nginx/access.log;
ls -ld /var/log/nginx
不存在就建:
mkdir -p /var/log/nginx
查看运行用户:
ps aux | grep nginx
通常是 nginx 或 www-data
修复权限:
chown -R nginx:nginx /var/log/nginx
chmod 755 /var/log/nginx
df -h
很多镜像默认:
access_log /dev/stdout;
error_log /dev/stderr;
✅ 看日志方式:
docker logs <容器名>
kubectl logs <pod>
error_log /var/log/nginx/error.log warn;
⚠️ notice / info 不会记录
建议调试用:
error_log /var/log/nginx/error.log debug;
http {
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
server {
listen 80;
server_name example.com;
access_log /var/log/nginx/example.access.log;
error_log /var/log/nginx/example.error.log;
location / {
root /usr/share/nginx/html;
}
}
}
你可以贴出:
nginx.conf / server 配置我可以直接帮你指出是哪一行导致不生效。