一聚教程网:一个值得你收藏的教程网站

热门教程

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 配置只影响客户端请求返回时的传输压缩,不会触碰磁盘上的日志文件。所以第一步是明确分离两者:

  1. Brotli 模块配置在 httpserver 块中,只对匹配 brotli_types 的响应生效
  2. 日志路径由 access_log /var/log/nginx/access.log 等指令指定,脚本操作的就是这个物理路径下的文件
  3. 确保 /var/log/nginx/ 目录权限允许运行脚本的用户读写(如 www-data 或 nginx 用户)
  4. 检查 /etc/logrotate.d/nginx 是否已存在轮转规则,避免与自定义脚本冲突

归档脚本里不用动 Brotli,但要兼容其存在

你的日志归档脚本(如 /usr/local/bin/nginx-log-archive.sh)保持原有逻辑即可,无需调用 brotli 命令或修改 Nginx 配置。重点是保证它不依赖 Brotli,也不被 Brotli 影响:

  1. 仍用 gzip -c 压缩昨日日志,生成 .gz 归档包(brotli 命令不适用于日志归档场景,且无标准支持)
  2. 清空原日志仍用 > /var/log/nginx/access.log,这步不影响 Nginx 继续写入,也与 Brotli 无关
  3. 若 Nginx 主进程 PID 文件位置非常规(如不在 /var/run/nginx.pid),脚本中 kill -USR1 的路径需同步修正,否则日志 reopen 失败
  4. 所有命令使用绝对路径(/bin/bash/usr/bin/gzip),防止 cron 环境下找不到命令

定时任务与执行用户需匹配 Nginx 权限

因为 Brotli 不改变日志行为,但脚本执行失败常源于权限问题:

  1. 如果 Nginx 以 www-data 用户运行,crontab 也应由该用户编辑:sudo -u www-data crontab -e
  2. 定时条目示例(每日凌晨 2:15 执行归档):

    15 2 * * * /usr/local/bin/nginx-log-archive.sh >> /var/log/nginx/archive.log 2>&1

  3. 追加日志到 archive.log 是为了留痕可查,比丢进 /dev/null 更利于排障
  4. 清理过期归档(如 90 天前的 .gz)可用独立脚本 + weekly cron,同样注意执行用户对 /var/log/nginx/archive/ 的写权限

验证是否真正协同工作

跑通后快速确认三件事即可断定 Brotli 和日志归档各司其职:

  1. curl -I -H "Accept-Encoding: br" https://yoursite.com/ 返回头含 Content-Encoding: br → Brotli 生效
  2. 次日查看 ls -l /var/log/nginx/archive/access.log-20260820.gz → 归档成功
  3. tail -n 1 /var/log/nginx/access.log 显示新请求日志 → 日志未中断、reopen 正常
  4. 磁盘空间趋势稳定(df -h /var/log 观察数日)→ 清理策略起效

热门栏目