温馨提示×

Debian Nginx日志如何压缩

小樊
39
2026-07-27 19:22:08
栏目: 智能运维

在 Debian 上压缩 Nginx 日志,常见做法有三种:手动压缩logrotate(推荐)按时间切割后压缩。下面按实际使用场景说明。


一、使用 logrotate(最推荐 ✅)

Debian 默认已安装 logrotate,并且 Nginx 自带 logrotate 配置

1️⃣ 查看 Nginx 的 logrotate 配置

cat /etc/logrotate.d/nginx

典型内容如下:

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

2️⃣ 关键参数说明

参数 作用
daily 每天轮转
rotate 14 保留 14 个历史日志
compress 使用 gzip 压缩
delaycompress 下次轮转再压缩(避免正在写入)
postrotate 重新加载 Nginx,避免日志继续写入旧文件

默认已经自动压缩为 .gz


3️⃣ 手动测试 logrotate

logrotate -vf /etc/logrotate.d/nginx

查看结果:

ls -lh /var/log/nginx/

你会看到类似:

access.log
access.log.1.gz
error.log
error.log.1.gz

二、手动压缩 Nginx 日志(不推荐长期使用)

1️⃣ 先重命名日志

mv /var/log/nginx/access.log /var/log/nginx/access.log.old

2️⃣ 让 Nginx 重新打开日志

systemctl reload nginx

3️⃣ 压缩旧日志

gzip /var/log/nginx/access.log.old

结果:

access.log.old.gz

⚠️ 手动方式不适合生产环境,容易遗漏或导致日志丢失。


三、按日期切割并压缩(进阶)

如果你想 按天生成带日期的日志并压缩

1️⃣ 修改 Nginx 配置

access_log /var/log/nginx/access_${time_iso8601}.log;

(⚠️ 不推荐,性能差)

✅ 更推荐用 logrotate + dateext

2️⃣ 在 logrotate 中加日期

dateext
dateformat -%Y%m%d

示例:

/var/log/nginx/*.log {
    daily
    dateext
    dateformat -%Y%m%d
    rotate 30
    compress
    missingok
    notifempty
    create 0640 www-data adm
    postrotate
        systemctl reload nginx
    endscript
}

生成效果:

access.log
access.log-20260121.gz

四、常见问题

❓ 日志没被压缩?

检查:

logrotate -d /etc/logrotate.d/nginx

查看是否触发压缩条件。


❓ Nginx 还在写旧日志?

一定要执行:

systemctl reload nginx

或:

nginx -s reload

❓ 想改成 7 天 / 30 天?

修改:

rotate 7

rotate 30

五、总结(推荐方案 ✅)

Debian + Nginx 最佳做法

  • 使用 logrotate
  • 已默认支持 gzip 压缩
  • 自动清理旧日志
  • 安全、稳定、无需人工干预

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

  • ✅ 定制 logrotate 规则
  • ✅ 分析你当前的 Nginx 日志大小
  • ✅ 配置只压缩 access.log,不压缩 error.log

直接贴你的 /etc/logrotate.d/nginx 内容即可。

0