在 Linux 上压缩 Nginx 日志,常见做法有几种,取决于你是手动压缩还是自动轮转压缩。下面按使用频率从高到低说明。
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
}
compress:启用压缩(默认 gzip)delaycompress:延迟一次压缩(避免正在写入的日志被压)rotate 14:保留 14 个旧日志logrotate -f /etc/logrotate.d/nginx
压缩后的日志类似:
access.log.1.gz
error.log.1.gz
如果只是临时压缩:
cd /var/log/nginx
gzip access.log.1
gzip error.log.1
或批量:
gzip /var/log/nginx/*.log.1
⚠️ 不要直接压缩正在写入的 access.log,否则 Nginx 不会自动重建文件。
如果日志文件被移动或压缩,需要通知 Nginx:
kill -USR1 $(cat /var/run/nginx.pid)
或:
nginx -s reopen
xz access.log.1
zstd access.log.1
rm access.log → Nginx 仍占用文件,磁盘不释放kill -USR1 → 日志不写入新文件✅ 用 logrotate
✅ 开启 compress
✅ 使用 postrotate 通知 Nginx
✅ 不要手动动当前日志文件
如果你愿意,我可以:
只要告诉我你的 Nginx 日志路径即可。