温馨提示×

Debian Nginx日志过大怎么办

小樊
34
2026-07-13 10:50:19
栏目: 智能运维

在 Debian 上 Nginx 日志过大 是常见问题,一般从 日志轮转、访问日志控制、错误日志级别、自动清理 四个方面解决。下面按“最推荐 → 可选”顺序说明。


一、最推荐:使用 logrotate(官方做法 ✅)

Debian 默认已安装 logrotateNginx 日志应该由它来管理

1️⃣ 查看 Nginx 的 logrotate 配置

cat /etc/logrotate.d/nginx

典型内容:

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

2️⃣ 手动测试是否生效

logrotate -vf /etc/logrotate.d/nginx

如果没生效,说明:

  • 日志路径不对
  • 或 Nginx 没 reload

这是最安全、最标准的方式


二、减少访问日志(非常有效 ✅)

1️⃣ 关闭不需要的访问日志

如果不需要统计访问:

access_log off;

例如:

server {
    listen 80;
    server_name example.com;
    access_log off;
}

2️⃣ 只记录关键请求(推荐)

access_log /var/log/nginx/access.log combined if=$loggable;

配合:

map $status $loggable {
    ~^[23]  0;   # 200/300 不记录
    default 1;
}

3️⃣ 使用 buffer(减少磁盘写)

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

三、控制错误日志级别(很重要 ✅)

1️⃣ 降低 error_log 级别

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

级别说明(从上到下越来越详细):

crit < error < warn < notice < info < debug

⚠️ 生产环境不要用 info / debug


四、定期清理旧日志(辅助方案)

1️⃣ 手动清理

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

2️⃣ 自动清理(cron)

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

五、防止日志无限增长(终极方案)

✅ 使用 systemd 限制 journal(如果混在一起)

journalctl --vacuum-size=100M

六、推荐的生产环境配置(总结 ✅)

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

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

配合:

logrotate + 7 天轮转 + gzip

七、快速自查清单 ✅

# 查看日志大小
du -sh /var/log/nginx/*

# 查看 logrotate 状态
cat /var/lib/logrotate/status

# 查看 nginx 日志配置
nginx -T | grep log

如果你愿意,可以把 access.log / error.log 的大小nginx.conf 相关配置贴出来,我可以帮你精确优化(比如高并发、CDN、API 场景)。

0