最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 中 Brotli 压缩如何配合定期清理脚本自动归档压缩运行日志
时间:2026-08-30 10:53:49 编辑:袖梨 来源:一聚教程网
Brotli压缩与Nginx日志归档清理完全独立:Brotli作用于HTTP响应体,日志归档处理/var/log/nginx/下的文件;二者互不干扰,可共存,只需确保权限、路径和脚本逻辑分离即可。
Brotli 压缩和 Nginx 运行日志的自动归档清理是两件独立的事:Brotli 作用于 HTTP 响应体(比如网页、API 返回内容),而日志归档压缩处理的是 /var/log/nginx/ 下的 access.log、error.log 等文件。它们不交叉、不互斥,但可以共存——你完全可以在启用 Brotli 的同时,用 Shell 脚本安全地归档压缩日志。
先确认 Brotli 和日志路径互不干扰
Brotli 配置只影响客户端请求返回时的传输压缩,不会触碰磁盘上的日志文件。所以第一步是明确分离两者:
- Brotli 模块配置在
http或server块中,只对匹配brotli_types的响应生效 - 日志路径由
access_log /var/log/nginx/access.log等指令指定,脚本操作的就是这个物理路径下的文件 - 确保
/var/log/nginx/目录权限允许运行脚本的用户读写(如 www-data 或 nginx 用户) - 检查
/etc/logrotate.d/nginx是否已存在轮转规则,避免与自定义脚本冲突
归档脚本里不用动 Brotli,但要兼容其存在
你的日志归档脚本(如 /usr/local/bin/nginx-log-archive.sh)保持原有逻辑即可,无需调用 brotli 命令或修改 Nginx 配置。重点是保证它不依赖 Brotli,也不被 Brotli 影响:
- 仍用
gzip -c压缩昨日日志,生成.gz归档包(brotli 命令不适用于日志归档场景,且无标准支持) - 清空原日志仍用
> /var/log/nginx/access.log,这步不影响 Nginx 继续写入,也与 Brotli 无关 - 若 Nginx 主进程 PID 文件位置非常规(如不在
/var/run/nginx.pid),脚本中 kill -USR1 的路径需同步修正,否则日志 reopen 失败 - 所有命令使用绝对路径(
/bin/bash、/usr/bin/gzip),防止 cron 环境下找不到命令
定时任务与执行用户需匹配 Nginx 权限
因为 Brotli 不改变日志行为,但脚本执行失败常源于权限问题:
- 如果 Nginx 以
www-data用户运行,crontab 也应由该用户编辑:sudo -u www-data crontab -e - 定时条目示例(每日凌晨 2:15 执行归档):
15 2 * * * /usr/local/bin/nginx-log-archive.sh >> /var/log/nginx/archive.log 2>&1 - 追加日志到
archive.log是为了留痕可查,比丢进/dev/null更利于排障 - 清理过期归档(如 90 天前的 .gz)可用独立脚本 + weekly cron,同样注意执行用户对
/var/log/nginx/archive/的写权限
验证是否真正协同工作
跑通后快速确认三件事即可断定 Brotli 和日志归档各司其职:
- curl -I -H "Accept-Encoding: br" https://yoursite.com/ 返回头含
Content-Encoding: br→ Brotli 生效 - 次日查看
ls -l /var/log/nginx/archive/有access.log-20260820.gz→ 归档成功 -
tail -n 1 /var/log/nginx/access.log显示新请求日志 → 日志未中断、reopen 正常 - 磁盘空间趋势稳定(
df -h /var/log观察数日)→ 清理策略起效