离线部署nginx brotli压缩需联网机预构建:编译libbrotli、ngx_brotli模块及nginx二进制,打包so模块、nginx可执行文件和brotli动态库;离线机部署模块、配置load_module与brotli指令,并用本地curl验证content-encoding: br生效。

离线环境部署 Nginx Brotli 压缩,核心是“提前准备、分层打包、本地验证”,不能依赖网络拉取源码或动态下载。整个过程需在有网的机器上完成全部构建与归档,再将可执行产物完整搬运至目标离线服务器。
提前在联网机上完成全链路构建
所有依赖必须提前下载并编译,包括底层库、模块和 Nginx 二进制:
- 下载 libbrotli 源码(github.com/google/brotli),用
./configure --prefix=/opt/brotli && make && make install安装到本地路径,记录安装目录(如/opt/brotli) - 下载 ngx_brotli 模块(github.com/google/ngx_brotli),注意同步其子模块
deps/brotli(可用git submodule update --init --recursive) - 下载对应版本的 Nginx 源码(如 nginx-1.24.0),确保与目标环境系统架构一致(x86_64/arm64)
- 在联网机上执行 configure 编译:
./configure --prefix=/usr/local/nginx \<br> --add-dynamic-module=../ngx_brotli \<br> --with-compat \<br> --with-openssl=../openssl-3.0.13 \<br> --with-zlib=../zlib-1.3.1 \<br> --with-pcre=../pcre2-10.42
(所有第三方库均使用本地已解压路径,不联网) - 执行
make,但不运行make install;直接打包objs/ngx_http_brotli_filter_module.so和objs/nginx二进制文件
离线服务器上的模块加载与配置
搬运以下 4 类文件到离线服务器指定位置:
-
动态模块文件:将
ngx_http_brotli_filter_module.so放入/usr/local/nginx/modules/(目录需手动创建) -
Nginx 二进制:替换原
/usr/local/nginx/sbin/nginx,注意备份旧版 -
libbrotli 运行时库:把联网机上
/opt/brotli/lib/下的libbrotlidec.so.*和libbrotlienc.so.*复制到离线机/usr/local/lib/,并执行sudo ldconfig -
配置声明:在
nginx.conf的http块顶部添加:load_module modules/ngx_http_brotli_filter_module.so;
再启用压缩:brotli on;<br> brotli_static off;<br> brotli_types text/plain text/css application/javascript application/json text/html image/svg+xml;<br> brotli_comp_level 5;
验证是否真正生效(不依赖外网)
无需 curl 外部站点,仅用本地请求即可确认:
- 启动前检查:
nginx -t应无unknown directive "brotli"报错 - 启动后执行:
nginx -V 2>&1 | grep brotli,应输出含with-http_brotli_module - 本地发起测试请求:
curl -I --header "Accept-Encoding: br" http://127.0.0.1/robots.txt,响应头中必须含Content-Encoding: br - 对比未带
Accept-Encoding的请求,确认响应体大小明显减小(可用curl -s | wc -c对比)
整个流程不调用任何远程仓库或包管理器,所有产物均可打包为一个 tar.gz 文件一次性导入离线环境,适合金融、政务、工控等强隔离场景。











