温馨提示×

linux如何压缩nginx日志

小樊
58
2026-09-26 19:47:39
栏目: 智能运维

在 Linux 上压缩 Nginx 日志,常见做法有几种,取决于你是手动压缩还是自动轮转压缩。下面按使用频率从高到低说明。


一、使用 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
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

2. 关键压缩参数说明

  • compress:启用压缩(默认 gzip)
  • delaycompress:延迟一次压缩(避免正在写入的日志被压)
  • rotate 14:保留 14 个旧日志

3. 手动触发一次(测试用)

logrotate -f /etc/logrotate.d/nginx

压缩后的日志类似:

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

二、手动压缩现有 Nginx 日志

如果只是临时压缩:

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

或批量:

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

⚠️ 不要直接压缩正在写入的 access.log,否则 Nginx 不会自动重建文件。


三、压缩后让 Nginx 重新打开日志(重要)

如果日志文件被移动或压缩,需要通知 Nginx:

kill -USR1 $(cat /var/run/nginx.pid)

或:

nginx -s reopen

四、使用其他压缩工具(可选)

1. 使用 xz(压缩率更高)

xz access.log.1

2. 使用 zstd(速度快)

zstd access.log.1

五、常见错误 ❌

  • 直接 rm access.log → Nginx 仍占用文件,磁盘不释放
  • 压缩正在写入的日志 → 新日志丢失
  • 忘记 kill -USR1 → 日志不写入新文件

六、推荐做法总结 ✅

✅ 用 logrotate
✅ 开启 compress
✅ 使用 postrotate 通知 Nginx
✅ 不要手动动当前日志文件

如果你愿意,我可以:

  • 帮你写一套 自定义 logrotate 配置
  • 或给你一个 定时压缩脚本(crontab)

只要告诉我你的 Nginx 日志路径即可。

0 踩