清理更新Brotli模块核心是替换模块文件并重载或升级Nginx进程,而非清缓存;需先验证模块是否存在、配置是否正确、响应是否兼容,再安全替换旧模块,最后匹配Nginx版本重新编译加载新模块。

清理和更新过时的 Brotli 模块,核心不是“清缓存”,而是**替换模块文件 + 重载或升级 Nginx 进程**。Brotli 本身不产生可清理的运行时缓存,它的压缩行为由 ngx_http_brotli_filter_module 动态控制,模块失效或版本不匹配时,必须显式更新。
确认当前 Brotli 模块是否过时或异常
先判断是否真需要更新,避免误操作:
- 运行
nginx -V 2>&1 | grep -i brotli,若无输出,说明模块未编译进当前二进制(不是“过时”,是“缺失”) - 检查
nginx.conf中是否有load_module modules/ngx_http_brotli_filter_module.so;,且路径存在、权限可读(ls -l /path/to/so) - 用
curl -I -H "Accept-Encoding: br" https://yoursite.com/test.js查响应头:有Content-Encoding: br但内容无法解压(brotli -d -t 报错),大概率是模块版本与 Nginx 不兼容
清理旧模块(安全移除)
动态模块可直接替换,无需卸载:
- 停用当前 Nginx:
nginx -s stop或通过宝塔/ systemctl 停止服务(确保无 worker 进程残留) - 备份旧模块文件:
cp /usr/local/nginx/modules/ngx_http_brotli_filter_module.so /usr/local/nginx/modules/ngx_http_brotli_filter_module.so.bak - 删除旧模块:
rm /usr/local/nginx/modules/ngx_http_brotli_filter_module.so - 注意:不要删
libbrotli系统库(如/usr/local/lib/libbrotlienc.so.1),那是底层依赖,保留即可
更新模块(重新编译并加载)
必须匹配当前 Nginx 版本源码和编译参数:
- 进入原始 Nginx 源码目录(如
/usr/local/src/nginx-1.24.0),执行nginx -V记下完整 configure 参数 - 拉取新版
ngx_brotli(推荐用与 Nginx 小版本匹配的分支,如 Nginx 1.24.x 对应google/ngx_brotli的master) - 追加参数重新 configure:
./configure [原参数] --add-dynamic-module=/path/to/ngx_brotli --with-compat - 执行
make(勿make install),生成新模块:objs/ngx_http_brotli_filter_module.so - 复制到模块目录:
cp objs/ngx_http_brotli_filter_module.so /usr/local/nginx/modules/ - 重载配置:
nginx -t && nginx -s reload(若已启用动态模块,reload 即可生效)
若需同步升级 Nginx 二进制(平滑切换)
当旧版 Nginx 内核存在漏洞或需升级 OpenSSL 时,必须走信号升级流程:
- 用相同 configure 参数编译新版 Nginx(含新 Brotli 模块),得到
objs/nginx - 覆盖二进制:
cp objs/nginx /usr/local/nginx/sbin/nginx,保持权限一致 - 发送
USR2启动新 master,再发WINCH优雅关闭旧 worker,最后QUIT终止旧 master - 全程零停机,新旧进程共存期间,Brotli 压缩由新 master 控制











