温馨提示×

nginx日志太大怎么办

小樊
42
2026-07-18 23:52:07
栏目: 编程语言

nginx 日志太大 时,一般从 日志切割、控制日志量、定期清理、开启压缩 这几个方向处理。下面按 最常用 → 进阶 给你一套完整方案。


一、最根本:做日志切割(强烈推荐)

✅ 方法 1:使用 logrotate(最推荐,生产必做)

nginx 官方和大多数 Linux 发行版都默认支持。

1️⃣ 查看或创建 logrotate 配置

ls /etc/logrotate.d/nginx

如果没有,新建:

vim /etc/logrotate.d/nginx

2️⃣ 推荐配置

/var/log/nginx/*.log {
    daily
    rotate 7
    missingok
    notifempty
    compress
    delaycompress
    sharedscripts
    postrotate
        systemctl reload nginx > /dev/null 2>&1
    endscript
}

✅ 说明:

  • daily:每天切割
  • rotate 7:保留 7 天
  • compress: gzip 压缩旧日志
  • reload nginx:防止 nginx 继续写旧文件

3️⃣ 测试是否生效

logrotate -d /etc/logrotate.d/nginx

二、减少日志量(非常有效)

✅ 1️⃣ 关闭不需要的日志

关闭访问日志(高并发场景常用)

access_log off;

或只记录错误:

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

✅ 2️⃣ 精简日志格式(推荐)

默认 combined 很详细,可以自定义:

http {
    log_format minimal '$remote_addr - $request - $status';
    access_log /var/log/nginx/access.log minimal;
}

✅ 3️⃣ 不记录静态资源(非常实用)

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

三、定期清理旧日志(兜底方案)

手动清理

find /var/log/nginx -name "*.log*" -mtime +7 -delete

或写定时任务

crontab -e
0 3 * * * find /var/log/nginx -name "*.log*" -mtime +7 -delete

四、防止日志无限增长(进阶)

✅ 限制日志大小(nginx 本身不支持,但可用 systemd)

journalctl --vacuum-size=500M

五、如果你用的是 Docker / K8s

Docker

logging:
  driver: "json-file"
  options:
    max-size: "100m"
    max-file: "3"

Kubernetes

logging:
  maxSize: 100Mi

六、排查:日志为什么突然变大?

常见原因:

  • 被刷接口(爬虫 / 攻击)
  • 健康检查未关闭日志
  • 错误日志级别太低

错误日志级别调整

error_log /var/log/nginx/error.log warn;

✅ 推荐组合(生产最佳实践)

必须做

  • logrotate 切割 + 压缩
  • 静态资源关闭 access_log

高并发

  • 精简日志格式
  • access_log 加 buffer

如果你愿意,可以告诉我:

  • 系统(CentOS / Ubuntu / Docker)
  • nginx 版本
  • 日志路径
  • 是否高并发

我可以 直接给你一份可复制的配置

0