nginx 正确启用 brotli 需三步:编译集成 ngx_brotli 模块、在 http/location 块中配置 brotli on 且 brotli_static off、按资源类型设 brotli_comp_level 3–7 并确保 https 环境。

要让 Nginx 真正用上 Brotli 并获得比 Gzip 更优的压缩性能,不能只加一行配置就完事——核心在于“模块可用、动态启用、按需调优”三步闭环。Brotli 对 HTML/JS/CSS 等文本资源的压缩率通常高 17–30%,但前提是它被正确集成并避开常见干扰项(比如误开 brotli_static on)。
确认 Nginx 已编译集成 ngx_brotli 模块
Nginx 官方主线版本(含 v1.25+)至今不原生支持 Brotli,必须手动引入第三方模块 google/ngx_brotli 并重新编译。验证是否成功集成有两个可靠方式:
- 执行
nginx -V 2>&1 | grep with-http_brotli_module,有输出说明已编译进内核 - 临时在配置中加入
brotli on;后运行nginx -t,若报错unknown directive "brotli",则模块未加载 - 宝塔用户需先卸载当前 Nginx,再通过【编译安装】→【添加自定义模块】路径指定
/www/server/ngx_brotli - Docker 或源码部署用户需在
./configure中显式添加--add-module=/path/to/ngx_brotli并重新编译
在 http 或 location 块中启用动态 Brotli 压缩
动态压缩由 brotli on 触发,对响应体实时编码,无需预生成 .br 文件。以下两项必须同时满足,否则压缩不会生效:
-
brotli_static off—— 关键!设为on会跳过动态压缩,只查找静态 .br 文件 -
brotli_types明确列出 MIME 类型,例如:text/plain text/css application/javascript application/json text/html image/svg+xml - 推荐将配置放在
http块顶层(全局生效),或更精细地放在location块中控制范围,如只为 API 启用 JSON 压缩
按资源类型设置合理的 brotli_comp_level 参数
Brotli 提供 0–11 共 12 级压缩质量,不同级别对 CPU 和压缩率影响显著,不能一概设为最高:
- 动态内容(API 返回、PHP 渲染页):推荐
brotli_comp_level 3–5,兼顾响应延迟与带宽节省 - 静态资源(JS/CSS/HTML):可设
6–7,服务器压力可控时收益明显 - 避免设为 9 及以上:CPU 开销陡增,而体积缩减边际效益极低
- 搭配
brotli_min_length 256防止小文件(如空响应、短 JSON)被无谓压缩
确保 HTTPS 环境并保持与 Gzip 共存
Brotli 压缩只在 HTTPS 下生效,因为 HTTP 请求的 Accept-Encoding 请求头中通常不含 br;而现代浏览器会自动按优先级选择 br > gzip > 无压缩,因此:
- 无需关闭已有 Gzip 配置,两者可共存
- 浏览器自动协商:支持 Brotli 的客户端收到
Content-Encoding: br,不支持的回退到 Gzip - 可通过
curl -H "Accept-Encoding: br" -I https://yoursite.com/script.js验证响应头











