Debian 上 Nginx 日志过大通常不是 Nginx 本身的 bug,而是由配置、访问量、或缺少日志轮转导致的。下面按常见原因逐一说明,并给出对应解决办法。
/var/log/nginx/access.log 或 error.log 几个 G 甚至几十 GDebian 默认通过 logrotate 管理 Nginx 日志,但如果:
就会导致日志无限增长。
ls -lh /var/log/nginx/
cat /etc/logrotate.d/nginx
确保存在并生效:
/etc/logrotate.d/nginx
典型内容(Debian 默认):
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
手动测试:
logrotate -d /etc/logrotate.d/nginx
logrotate -f /etc/logrotate.d/nginx
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head
location ~* \.(js|css|png|jpg|gif) {
access_log off;
}
access_log /var/log/nginx/access.log main buffer=32k flush=5s;
tail -n 100 /var/log/nginx/error.log
error_log /var/log/nginx/error.log warn;
修改配置后未 reload Nginx
nginx -t
systemctl reload nginx
如果你是用:
/var/log/nginx那么 logrotate 不会自动生效,需要手动配置。
# 清空(不删文件)
: > /var/log/nginx/access.log
: > /var/log/nginx/error.log
# 或 truncate
truncate -s 0 /var/log/nginx/access.log
⚠️ 只是应急,不解决根本原因。
Debian 上 Nginx 日志过大,90% 是因为 logrotate 没生效或访问量过高未限制日志。
如果你愿意,可以贴出:
nginx.confls -lh /var/log/nginxcat /etc/logrotate.d/nginx我可以帮你精准分析是哪一种情况。