必须先编译集成ngx_brotli模块并安装libbrotli库,再在http块中配置brotli on、brotli_static off、brotli_comp_level等指令,否则brotli on将被静默忽略;动态压缩需确保客户端https请求含accept-encoding: br。

要在 Nginx 中真正启用 Brotli 压缩,不能只改几行配置——必须先确保底层模块已集成,再合理开启动态压缩。否则即使写了 brotli on,Nginx 也会静默忽略。
确认并安装 ngx_brotli 模块
Nginx 官方不内置 Brotli 支持,必须手动引入第三方模块:
– 下载 google/ngx_brotli 及其依赖的 libbrotli;
– 编译方式分两种:
• 静态编译:在 Nginx 源码 configure 阶段加 --add-module=/path/to/ngx_brotli,重编译 Nginx;
• 动态加载(推荐):用 make modules 生成 ngx_http_brotli_filter_module.so,再在 nginx.conf 开头(events 前)添加:
load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;
– 验证是否成功:nginx -V 2>&1 | grep -o ngx_brotli,有输出即表示模块已加载。
基础压缩配置(放在 http 块内)
模块就绪后,在 http{} 块中添加以下指令:
-
brotli on; —— 必须显式开启,仅当客户端请求头含
Accept-Encoding: br且走 HTTPS 时才触发(HTTP 下浏览器不发 br) -
brotli_static off; —— 关键!设为
on会跳过动态压缩,只查 .br 文件,新手常误开 - brotli_comp_level 4–6; —— 推荐 4(兼顾速度与压缩率),11 是极限但 CPU 开销大,生产环境慎用
- brotli_min_length 1k; —— 过小(如 20B)会导致大量微响应反复申请缓冲区,建议 ≥1024
-
brotli_types …; —— 明确列出 MIME 类型,至少包含:
text/plain text/css application/javascript application/json text/html image/svg+xml
brotli_buffers 要按需调优
这个参数直接影响内存占用和并发稳定性,不是“开就完事”:
- 格式是
brotli_buffers 数量 大小,例如brotli_buffers 16 8k≈ 单请求最多占用 128KB 内存 - 低流量小站:用
8 4k(32KB),轻量够用 - 中高并发(500–2000):推荐
16 8k,吞吐与稳定性较平衡 - API 服务返回大 JSON:可试
32 8k,防因缓冲不足退回到未压缩 - 容器或内存紧张环境:优先减数量,如
8 8k(64KB),比16 4k更易管理
保留 Gzip 作为兼容兜底
Brotli 和 Gzip 完全可以共存:
- 现代浏览器自动选
br,老浏览器回落到gzip - 无需关闭 gzip 配置,保持
gzip on+gzip_types即可 - 响应头中会看到
Content-Encoding: br或gzip,取决于客户端能力











