Nginx 1.24 默认不支持 Brotli,宝塔需重编译添加 --add-module=../brotli/ngx_brotli;启用需在 nginx.conf 中显式配置 brotli on、brotli_types 等参数,并 service nginx restart 验证。

确认当前 Nginx 是否已支持 Brotli
直接运行 nginx -V 2>&1 | grep brotli,如果无输出,说明未启用——Nginx 官方主线版本(包括 1.24)默认不带 Brotli 支持,宝塔面板自带的 Nginx 编译时也通常未启用 --with-http_brotli_module。别被“Nginx 1.24”这个数字迷惑,版本新 ≠ 自带 Brotli。
编译安装含 Brotli 的 Nginx(适配宝塔)
宝塔的 Nginx 是源码编译安装的,路径固定为 /www/server/nginx,不能直接换二进制包,必须重编译。关键点是复用原有配置和模块,只新增 Brotli 模块:
- 进入宝塔 Nginx 源码目录:
cd /www/server/nginx/src - 下载 Brotli 库(推荐官方 Git):
git clone https://github.com/google/brotli.git ../brotli(注意路径在../brotli,与 src 同级) - 查看原编译参数:
nginx -V 2>&1 | grep "configure arguments:",复制整行,末尾追加--add-module=../brotli/ngx_brotli - 执行 configure(务必保留原有所有参数!);然后
make(不用make install) - 备份原二进制:
mv /www/server/nginx/sbin/nginx /www/server/nginx/sbin/nginx.bak;再复制新编译的:cp objs/nginx /www/server/nginx/sbin/ - 验证:
/www/server/nginx/sbin/nginx -t,成功后service nginx restart
在 nginx.conf 中启用 Brotli 压缩
Brotli 模块启用后,需手动添加配置,它不兼容 gzip 配置项,也不能写在 http 块顶层就全局生效——必须显式开启并指定 MIME 类型:
brotli on; brotli_comp_level 6; brotli_types text/plain text/css text/xml text/javascript application/javascript application/x-javascript application/xml application/json application/rss+xml application/atom+xml image/svg+xml; brotli_static always;
注意:brotli_static always 表示优先尝试读取预压缩的 .br 文件(需你提前用 brotili 命令生成),若没对应文件则实时压缩;brotli_comp_level 推荐 4–6,级别越高 CPU 消耗越大,1.24 下 6 是较稳的平衡点。
验证是否生效及常见失败点
用浏览器开发者工具 → Network → 刷新页面 → 看响应头是否有 content-encoding: br。失败常见原因:
- 没重启 Nginx(仅 reload 不够,得
service nginx restart) -
brotli_types里漏了你要压缩的类型,比如 Vue 打包的.js文件实际是application/javascript,不是text/javascript - 客户端不支持:旧版 Safari、IE 全系、Android WebView ≤ 75 均不识别
br,Nginx 不会自动 fallback 到 gzip,得靠前端或 CDN 层处理 - 宝塔「网站」→「配置文件」里误删了刚加的 brotli 配置——宝塔有时会覆盖自定义内容,建议把 brotli 配置块放在
http块末尾,并加注释标记
真正麻烦的是混合部署场景:CDN 开了 Brotli、源站又开一次,或 gzip/brotli 同时启用导致响应头冲突。这种时候得关掉一个,优先保 Brotli——毕竟它压缩率高、现代浏览器覆盖率已超 95%。


















