温馨提示×

debian nginx日志怎样压缩

小樊
32
2026-10-04 07:56:26
栏目: 智能运维

在 Debian 上,Nginx 日志压缩通常分 “运行中日志滚动压缩” 和 “历史日志手动/自动压缩” 两种情况。最常见、推荐的做法是用 logrotate。


一、使用 logrotate(推荐,Debian 默认已安装)

Debian 下 Nginx 通常已经带有 logrotate 配置:

/etc/logrotate.d/nginx

默认内容类似:

/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    prerotate
        if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
            run-parts /etc/logrotate.d/httpd-prerotate; \
        fi \
    endscript
    postrotate
        invoke-rc.d nginx rotate >/dev/null 2>&1
    endscript
}

关键压缩参数说明

  • compress:启用压缩(默认 gzip)
  • delaycompress:延迟一轮再压缩(避免正在写入的日志被压)
  • compresscmd / compressext:可自定义压缩命令和扩展名

例如改成 zstd 压缩(更高效):

compress
compresscmd /usr/bin/zstd
compressext .zst
uncompresscmd /usr/bin/unzstd

二、立即测试 logrotate 是否生效

logrotate -d /etc/logrotate.d/nginx   # 模拟执行
logrotate -f /etc/logrotate.d/nginx  # 强制执行

执行后你会看到:

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

三、手动压缩已有日志(一次性)

如果你只是想压缩旧日志:

gzip /var/log/nginx/access.log.1

或批量:

gzip /var/log/nginx/*.log.*

查看压缩日志:

zcat /var/log/nginx/access.log.1.gz | head

四、Nginx 日志实时切割(避免单文件过大)

logrotate 已包含:

postrotate
    invoke-rc.d nginx rotate
endscript

这相当于:

nginx -s reopen

确保 Nginx 重新打开日志文件,而不是写旧文件。


五、调整保留时间和频率(示例)

只保留 7 天、每天压缩:

daily
rotate 7
compress

每月压缩一次:

monthly
rotate 12
compress

六、确认 cron 是否在运行

logrotate 通常由 cron 调用:

systemctl status cron

总结

✅ 最佳实践:直接用 Debian 自带的 /etc/logrotate.d/nginx
✅ 压缩方式:compress(gzip / zstd)
✅ 不要手动 mv 日志后不 reload nginx

如果你是 Docker / Kubernetes / 自定义路径 Nginx,可以告诉我,我可以给你对应方案。

0 踩