Debian 上 Nginx 日志不更新通常不是 Nginx 本身“坏了”,而是日志被轮转、权限、路径或配置变化导致的。下面按最常见 → 较少见的顺序给你排查清单。
Debian 默认会安装 logrotate,Nginx 日志每天/每周会被轮转。
/var/log/nginx/access.log 存在但不再增长access.log.1
access.log.2.gz
logrotate 把旧日志移走,但 Nginx 仍打开旧文件句柄,不会自动写新文件。
ls -lh /var/log/nginx/
让 Nginx 重新打开日志文件:
sudo nginx -s reopen
或者:
sudo systemctl reload nginx
✅ 推荐:logrotate 配置里应该已经有这一句,检查:
cat /etc/logrotate.d/nginx
应包含:
postrotate
/usr/sbin/nginx -s reopen
endscript
如果没有,补上。
nginx -T | grep -E 'access_log|error_log'
确认日志路径是否还是:
/var/log/nginx/access.log
⚠️ 有时你改了 /etc/nginx/sites-enabled/*,但忘了 reload。
sudo nginx -t
sudo systemctl reload nginx
如果配置改了但没 reload,日志不会更新。
ls -ld /var/log/nginx
正常应为:
drwxr-x--- root adm
或 nginx 用户可写。
ps aux | grep nginx
通常是:
www-data
ls -l /var/log/nginx/access.log
如果权限不对:
sudo chown www-data:adm /var/log/nginx/access.log
sudo chmod 640 /var/log/nginx/access.log
curl -I http://localhost
或:
tail -f /var/log/nginx/access.log
access_log off检查配置中是否有:
access_log off;
或:
access_log /dev/null;
systemctl status nginx
journalctl -u nginx
df -h
df -i
✅ 如果 inode 或磁盘满了,日志会直接停止。
# 1. 是否有请求
curl http://localhost
# 2. 日志是否真的没更新
tail -f /var/log/nginx/access.log
# 3. 是否路径变了
nginx -T | grep access_log
# 4. 是否 logrotate 问题
nginx -s reopen
# 5. 磁盘是否满
df -h
你可以直接贴出:
nginx -T | grep -E 'access_log|error_log'ls -lh /var/log/nginx/cat /etc/logrotate.d/nginx我可以精确告诉你哪一步导致日志不更新。