统一配置brotli需将brotli on;和gzip off;置于http块顶层,配合brotli_types指定文本类型,通过location分层调参,并用curl验证content-encoding: br生效。

在多域名环境下统一配置 Brotli 压缩,核心是把所有关键指令放在 http 块顶层,而非分散到每个 server 块中——这样既能全局生效,又避免重复配置和潜在冲突。
确保 ngx_brotli 模块已真正集成
多域名不改变模块依赖逻辑。必须先验证模块可用,否则任何配置都无效:
- 运行
nginx -V 2>&1 | grep with-http_brotli_module,有输出才说明编译时已注入 - 执行
nginx -t,不报unknown directive "brotli"错误才算通过基础验证 - 宝塔用户不能“在线添加模块”,必须走「卸载 → 编译安装 → 添加自定义模块」完整路径
在 http 块中统一启用并约束作用范围
Brotli 配置写在 http{} 内,对所有 server(即所有域名)自动生效,无需逐个复制:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 必须写
brotli on;和gzip off;成对出现,建议紧挨着放在http开头 -
brotli_types要覆盖全部域名共用的文本资源类型,例如:text/plain text/css application/javascript application/json text/html image/svg+xml - 不要写
brotli_types *,否则可能误压图片、PDF 等二进制文件,导致体积变大
按资源特性分层调参,不搞“一刀切”
多个域名可能托管不同性质的服务(如主站 HTML、API 接口、静态 CDN 子域),需用 location 块做精细化控制:
- 对 API 域名(如
api.example.com)下的/v1/接口:
在对应location /v1/ { ... }中设brotli_comp_level 3; brotli_min_length 20; - 对前端静态资源域名(如
static.example.com):
在location ~* \.(js|css|html|svg)$ { ... }中设brotli_comp_level 6; brotli_static on; - 所有 location 中都要显式写
brotli on;和brotli_static off;(动态压缩)或brotli_static on;(预压缩),不能依赖继承
保留 gzip 作为兼容兜底(可选但推荐)
虽然现代浏览器都支持 Brotli,但某些旧 WebView 或内部系统仍只认 gzip:
- 若需兼容,可保留
gzip on;,但务必缩小其作用范围:gzip_types text/plain;—— 仅保障最基础文本兜底,避免与 Brotli 同时触发 - 不建议同时对
application/javascript等类型开启 gzip 和 brotli,Nginx 可能重复编码,徒增 CPU 开销 - 验证是否生效:用
curl -H "Accept-Encoding: br" -I https://example.com/app.js,看响应头是否有Content-Encoding: br










