温馨提示×

Nginx日志过大该如何处理

小樊
38
2026-08-12 04:19:59
栏目: 编程语言

当 Nginx 日志过大时,常见原因包括访问量高、日志未切割、未开启压缩、或记录了不必要的信息。下面从诊断 → 处理 → 长期优化三个层面给你一套实用方案。


一、先确认问题

1️⃣ 查看日志大小

du -sh /var/log/nginx/*

常见大文件:

  • access.log
  • error.log
  • 自定义日志路径

2️⃣ 查看日志增长速度

wc -l /var/log/nginx/access.log
tail -f /var/log/nginx/access.log

二、立即处理(短期方案)

✅ 方案 1:清空日志(不删文件,不影响 Nginx)

truncate -s 0 /var/log/nginx/access.log
truncate -s 0 /var/log/nginx/error.log

⚠️ 不建议直接 rm,否则 Nginx 仍占用磁盘空间。


✅ 方案 2:手动切割日志

mv access.log access.log.2026-01-21
nginx -s reopen

三、长期解决方案(推荐)

✅ 方案 3:使用 logrotate(最推荐 ✅)

1️⃣ 查看或创建配置

vim /etc/logrotate.d/nginx

2️⃣ 推荐配置

/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:重新打开日志文件

3️⃣ 测试

logrotate -d /etc/logrotate.d/nginx

✅ 方案 4:减少日志内容(非常有效)

1️⃣ 精简 access_log

❌ 默认:

access_log /var/log/nginx/access.log;

✅ 改为:

access_log /var/log/nginx/access.log combined buffer=32k flush=5m;

或关闭不需要的日志:

access_log off;

2️⃣ 不记录静态资源

location ~* \.(jpg|jpeg|png|gif|css|js|ico|woff2)$ {
    access_log off;
}

✅ 方案 5:错误日志级别调整

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 释放空间

nginx -s reload

六、最佳实践总结 ✅

生产环境推荐组合

  1. 使用 logrotate 自动切割 + 压缩
  2. 不记录静态资源日志
  3. 错误日志设为 warn
  4. 开启日志 buffer
  5. 定期监控磁盘

七、如果你愿意,我可以帮你:

  • ✅ 根据你的 Nginx 配置文件定制日志方案
  • ✅ 判断 是否日志异常(被刷接口)
  • ✅ 给你一套 Docker / Kubernetes 场景的日志方案

只要贴出:

nginx -T

0