Debian 上 Nginx 日志“丢失”通常不是真的被删了,而是配置、轮转或权限等问题导致你“看不到”或“没写进去”。下面按最常见原因逐条排查。
检查你访问的 server 或 location:
grep -R access_log /etc/nginx/
grep -R error_log /etc/nginx/
常见情况:
error_log,没配置 access_loglocation 里写了:access_log off;
✅ 解决:在 server 或 http 块加上:
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
Debian 默认用 logrotate:
cat /etc/logrotate.d/nginx
如果看到:
postrotate
invoke-rc.d nginx rotate >/dev/null 2>&1
endscript
但 Nginx 没收到信号,就会继续写旧文件(已改名)。
✅ 检查:
ls -l /var/log/nginx/
如果你看到:
access.log.1access.log.1说明 reopen 失败
✅ 解决:
nginx -s reopen
或
systemctl reload nginx
Nginx worker 通常是 www-data:
ps aux | grep nginx
检查:
ls -ld /var/log/nginx
ls -l /var/log/nginx/access.log
如果不是:
www-data www-data
✅ 修复:
chown -R www-data:adm /var/log/nginx
chmod 0755 /var/log/nginx
如果你看到:
error_log /dev/stderr;
或
access_log syslog:server=...;
那日志不在文件里
✅ 查看:
journalctl -u nginx
df -h
df -i
✅ 如果 100%:
改了配置但没生效:
nginx -t
systemctl restart nginx
nginx -t
ps aux | grep nginx
ls -l /var/log/nginx
grep access_log /etc/nginx/sites-enabled/*
journalctl -u nginx --no-pager | tail
你可以贴出:
nginx -T 输出(脱敏)ls -l /var/log/nginx我可以直接帮你定位是哪一类问题。