nginx 日志不显示,一般可以从配置、路径、权限、运行方式、请求是否真的到达这几个方面排查。下面按最常见原因给你一个系统排查清单。
access_log / error_log 是否开启http {
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
}
或在 server / location 中检查:
server {
listen 80;
server_name example.com;
access_log /var/log/nginx/example.access.log;
error_log /var/log/nginx/example.error.log;
}
⚠️ 注意:
access_log off;,对应请求就不会记录access_log 和 error_log 是分开生效的ls -l /var/log/nginx/
如果没有:
touch /var/log/nginx/access.log
touch /var/log/nginx/error.log
然后重载 nginx:
nginx -s reload
查看:
ps aux | grep nginx
通常是:
nginx: worker process (nginx)
worker 进程才是写日志的用户
grep user /etc/nginx/nginx.conf
例如:
user nginx;
chown -R nginx:nginx /var/log/nginx
chmod -R 755 /var/log/nginx
或(开发/测试环境):
chmod 777 /var/log/nginx
⚠️ 生产环境不建议 777
curl -v http://localhost
如果返回 404 / 403 / 甚至没有响应,日志可能不写。
curl http://127.0.0.1/test404
然后查看:
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log
location 规则拦住例如:
location / {
return 444;
}
444 不会写 access 日志(这是 nginx 的特性)
✅ 改成:
return 404;
error_log /var/log/nginx/error.log warn;
如果你只开了 error,但问题是 info / debug,就看不到。
error_log /var/log/nginx/error.log debug;
⚠️ 生产环境不要长期开 debug,日志会非常大
nginx -t
nginx -s reload
如果配置有错,日志不会生效。
docker logs <容器名>
docker exec -it <容器> bash
ls /var/log/nginx
nginx -t
ps aux | grep nginx
ls -l /var/log/nginx
curl http://127.0.0.1
tail -f /var/log/nginx/access.log
你可以把下面这些信息发我(打码即可):
nginx -Vnginx.conf 相关部分我可以直接告诉你哪一行配置有问题 ✅