Nginx 日志没有数据,通常不是“没访问”,而是日志没有被写入或配置没生效。下面按最常见原因给你一个排查清单,基本都能定位到问题。
Nginx 日志路径由配置决定,不是固定目录。
nginx -T 2>/dev/null | grep -E 'access_log|error_log'
常见路径:
/var/log/nginx/access.log/var/log/nginx/error.log/data/logs/nginx/)✅ 确认你查看的是 真正生效的配置里的路径
curl -I http://127.0.0.1
或
curl http://localhost/
如果返回 200 / 404 / 301,说明请求是有的。
access_log off;
如果有这一行,日志不会写。
✅ 正确写法:
access_log /var/log/nginx/access.log;
例如:
access_log /var/log/nginx/access.log if=$loggable;
如果 $loggable 为 0,就不会写日志。
Nginx 默认会缓冲日志:
access_log /var/log/nginx/access.log combined buffer=32k flush=5m;
✅ 现象:
✅ 解决(调试时):
access_log /var/log/nginx/access.log combined;
ls -ld /var/log/nginx
ls -l /var/log/nginx/access.log
Nginx worker 进程用户通常是:
nginxwww-data✅ 修复示例:
chown -R nginx:nginx /var/log/nginx
chmod 755 /var/log/nginx
server {
listen 80;
server_name other.com;
}
而你访问的是 IP 或别的域名。
✅ 排查:
nginx -T | grep server_name
例如:
return 444;
deny all;
这些可能不会写 access 日志。
如果 error.log 也没有:
✅ 检查:
ps aux | grep nginx
journalctl -u nginx
Nginx 可能输出到 stdout:
docker logs <container_id>
✅ 是否真的有请求
✅ 日志路径是不是你以为的那个
✅ 是否 access_log off
✅ 是否权限不足
✅ 是否 buffer 没 flush
✅ 是否被 if / map 条件过滤
你可以直接贴出:
1️⃣ nginx -T 输出(或关键 server 段)
2️⃣ 你查看的日志路径
3️⃣ 是 access.log 还是 error.log 没数据
我可以一步一步帮你精确指出是哪一条导致的。