必须源码编译集成ngx_brotli模块并依赖libbrotli库,配置brotli on等指令后,Nginx才能启用Brotli压缩,其压缩率比Gzip高17–30%,且与Gzip可共存,浏览器自动按Accept-Encoding优先选择br。

要让 Nginx 真正用上 Brotli 压缩,不能靠简单改配置,必须先确保底层支持——Nginx 官方至今不内置 Brotli,得手动编译集成 google/ngx_brotli 模块,并依赖 libbrotli 库。成功后,它会自动优先响应支持 br 的现代浏览器,压缩率比 Gzip 高 17–30%,尤其对 HTML、JS、CSS 这类文本资源效果显著。
确认环境与前置依赖
系统需具备基础编译能力及开发头文件:
- CentOS/RHEL:
yum groupinstall "Development Tools",再装openssl-devel pcre-devel zlib-devel git autoconf automake libtool - Ubuntu/Debian:
apt-get install build-essential libssl-dev libpcre3-dev zlib1g-dev git autoconf automake libtool
注意:autoconf、automake、libtool 是编译 libbrotli 所必需,缺一不可。
安装 libbrotli 核心库
该库提供编码/解码能力,必须先装到系统路径(如 /usr/local),否则 Nginx 编译时会报找不到头文件或链接失败。
- 克隆源码:
git clone https://github.com/google/brotli.git && cd brotli - 推荐使用 autotools 方式(兼容性更稳):
./bootstrap && ./configure --prefix=/usr/local && make && sudo make install - 刷新动态库缓存:
sudo ldconfig,确保libbrotlidec.so和libbrotlienc.so可被识别
编译带 ngx_brotli 的 Nginx
下载你当前使用的 Nginx 版本源码(如 nginx-1.24.0),同时拉取模块:
git clone https://github.com/google/ngx_brotli.git- 进入 Nginx 源码目录,执行 configure(关键参数):
./configure --add-dynamic-module=../ngx_brotli --with-compat [你的原有参数] ... - 运行
make && sudo make install;默认安装到/usr/local/nginx - 验证是否成功:
nginx -V 2>&1 | grep -o with-http_brotli_module,有输出即表示模块已集成
配置并启用 Brotli 压缩
编辑 nginx.conf,在 http 块中添加:
-
brotli on;—— 必须显式开启,否则不生效 -
brotli_comp_level 6;—— 推荐值 4–6,兼顾速度与压缩率;设为 11 会明显拖慢响应 -
brotli_types text/plain text/css text/javascript application/json application/xml+rss;—— 覆盖你实际返回的 MIME 类型,图片、视频等二进制类型无需加入 -
brotli_min_length 1024;—— 小于 1KB 的响应不压缩,避免 CPU 白耗(默认仅 20 字节,太低) -
brotli_static off;—— 目录级动态压缩必须关掉此项;若设为on或always,Nginx 会尝试读 .br 文件,而非实时压缩
Gzip 可与 Brotli 共存,无需关闭;浏览器自动按 Accept-Encoding 选择最优方案(br > gzip > identity)。
验证是否生效
用 curl 直连 Nginx(绕过 CDN 或代理):
curl -I -H "Accept-Encoding: br" https://yoursite.com/test.js- 检查响应头是否含
Content-Encoding: br,且状态码为 200 - 对比未带
br头的请求,确认大小差异(可用curl -s -w "%{size_download}\n" -o /dev/null ...)
注意:Brotli 在 HTTPS 下才被主流浏览器主动协商,HTTP 环境下即使服务端支持,客户端通常也不会发 br 到 Accept-Encoding。


















