发布于2026-07-03 阅读(0)
扫一扫,手机访问
Nginx 跑久了,日志文件难免越积越厚。别看 access.log 和 error.log 平时不起眼,一旦服务器流量上来,几天不清理,几十个 GB 的磁盘空间说没就没。所以,压缩日志这事儿,其实是个基本功。

logrotate 工具logrotate 几乎是 Linux 系统上日志管理的标配工具,专门用来自动压缩、轮转、删除老日志。配置起来也不复杂,几步就能搞定。
logrotate先创建或编辑 Nginx 的日志轮转配置文件:
sudo nano /etc/logrotate.d/nginx然后把下面这段配置贴进去:
/var/log/nginx/*.log {
daily
missingok
rotate 7
compress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}这里简单解释一下几个关键参数:
daily 表示每天轮转一次;rotate 7 保留最近 7 天的日志,超过的自动删除;compress 就是压缩旧日志,默认用 gzip;notifempty 表示如果日志文件是空的,就不轮转,避免白费力气;create 0640 www-data adm 指定新日志文件的权限和属主。postrotate 里的脚本会在轮转完成后向 Nginx 主进程发送 USR1 信号,让它重新打开新的日志文件继续写。配置写完后,可以用以下命令测试一下,确保没语法错误:
sudo logrotate -f /etc/logrotate.d/nginx加上 -f 参数会强制轮转一次,方便验证效果。
如果你不想依赖自动工具,或者只是临时处理一下,手动压缩也完全可以。
sudo gzip /var/log/nginx/access.log
sudo gzip /var/log/nginx/error.log直接压缩后,Nginx 会找不到原来的日志文件,所以需要先重命名原文件,再创建一个符号链接指向压缩后的文件,这样 Nginx 才能继续正常写入。
sudo mv /var/log/nginx/access.log /var/log/nginx/access.log.1
sudo ln -s /var/log/nginx/access.log.1.gz /var/log/nginx/access.log
sudo mv /var/log/nginx/error.log /var/log/nginx/error.log.1
sudo ln -s /var/log/nginx/error.log.1.gz /var/log/nginx/error.log注意:符号链接指向的是压缩后的 .gz 文件,Nginx 写日志时会通过链接直接写入该文件(内容会被追加到压缩包内,但实际写入的是未压缩的流,这个机制比较特殊,不过大多数场景下够用)。更稳妥的做法还是用 logrotate 的 compress 选项,它内部处理得更好。
如果日志文件实在太大,而且很多内容其实没必要记录,可以降低日志级别。比如,把 info 改成 warn 或 error,就能大幅减少输出量。
编辑 Nginx 主配置文件 /etc/nginx/nginx.conf 或某个站点的配置,找到 http 块里的 log_level 设置:
http {
log_level info;
# 可以改为 notice, warn, error 等...
}sudo nginx -s reload改完之后记得重新加载,不用重启服务。
除了 logrotate,还有一些更专业的日志管理工具,比如 rsyslog 和 fluentd。它们不仅能做压缩和轮转,还能做集中收集、过滤、转发等高级功能。如果你的服务器集群规模较大,或者日志需要汇总分析,可以考虑引入这类工具。但对大多数单机场景来说,logrotate 已经足够用了。
总之,压缩 Nginx 日志这件事,方法不少,核心思路就两个:一是自动轮转压缩,二是减少不必要的内容输出。选一个最适合自己维护习惯的方案就好。
上一篇:inotify监控文件效率如何
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8