当 Nginx 日志过大时,常见原因包括访问量高、日志未切割、未开启压缩、或记录了不必要的信息。下面从诊断 → 处理 → 长期优化三个层面给你一套实用方案。
du -sh /var/log/nginx/*
常见大文件:
access.logerror.logwc -l /var/log/nginx/access.log
tail -f /var/log/nginx/access.log
truncate -s 0 /var/log/nginx/access.log
truncate -s 0 /var/log/nginx/error.log
⚠️ 不建议直接 rm,否则 Nginx 仍占用磁盘空间。
mv access.log access.log.2026-01-21
nginx -s reopen
logrotate(最推荐 ✅)vim /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
rotate 7
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
nginx -s reopen
endscript
}
✅ 说明:
daily:每天切割rotate 7:保留 7 天compress:gzip 压缩nginx -s reopen:重新打开日志文件logrotate -d /etc/logrotate.d/nginx
❌ 默认:
access_log /var/log/nginx/access.log;
✅ 改为:
access_log /var/log/nginx/access.log combined buffer=32k flush=5m;
或关闭不需要的日志:
access_log off;
location ~* \.(jpg|jpeg|png|gif|css|js|ico|woff2)$ {
access_log off;
}
error_log /var/log/nginx/error.log warn;
级别:
debug < info < notice < warn < error < crit
⚠️ 生产环境不建议 info / debug
access_log /var/log/nginx/access.log combined buffer=64k flush=1m;
✅ 减少磁盘 IO
lsof | grep deleted
nginx -s reload
✅ 生产环境推荐组合
logrotate 自动切割 + 压缩warn只要贴出:
nginx -T