Nginx 日志占用过高(磁盘空间暴涨、IO 高、文件过大)通常由以下几类原因导致,可按优先级排查:
现象:access.log 或 error.log 增长极快
原因:
error_log 级别设为 debug / info解决:
error_log /var/log/nginx/error.log warn;
访问日志可只记录必要字段,或关闭不需要的日志:
access_log off; # 某些静态资源
现象:单个 access.log 几个 GB 甚至几十 GB
原因:
logrotatenocopytruncate 但 Nginx 没 reload解决(标准做法):
# /etc/logrotate.d/nginx
/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
}
现象:日志短时间爆量
原因:
排查:
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head
解决:
limit_req_zone $binary_remote_addr zone=req:10m rate=10r/s;
现象:单行日志特别长
原因:
$request_body建议:
bodylocation ~* \.(js|css|png)$ {
access_log off;
}
现象:磁盘占用不高,但系统卡
原因:
error.log debug)解决:
buffer:access_log /var/log/nginx/access.log main buffer=32k flush=5s;
现象:logrotate 执行了,但文件还在变大
原因:
USR1copytruncate 但 Nginx 仍写原 inode验证:
ls -i access.log
确认 Nginx 写的是新文件。
du -sh /var/log/nginxnginx -T | grep logdebug如果你愿意,可以把 nginx.conf 相关日志配置 或 磁盘占用截图 发我,我可以直接帮你定位是哪一类问题。