nginx 配置 brotli 压缩需精准指定 mime 类型:必配 text/html、text/css、application/javascript、application/json、image/svg+xml;排除所有图片、字体、pdf、音视频等已压缩类型;类型必须与响应头 content-type 严格一致,且需配合 brotli on 和 brotli_static off 使用。

Linux 下 Nginx 配置 Brotli 压缩支持的 MIME 类型,核心不是“加几个类型就行”,而是精准覆盖真正受益的文本资源、严格排除无效或有害类型,并与实际响应头中的 Content-Type 完全一致。
必须显式配置的受益类型
Brotli 对纯文本内容有显著压缩优势,以下类型经实测为关键且高频:
- text/html:漏掉会导致首页、SSR 页面完全绕过压缩
- text/css 和 application/javascript:前端静态资产主力,压缩率提升最明显(比 gzip 高 17–25%)
-
application/json:API 响应、i18n 数据等小体积但高频率内容,
brotli_comp_level 4即高效 - image/svg+xml:SVG 是 XML 文本,未压缩时体积常达 KB 级,Brotli 可再压 30%+,常被遗漏但不可少
- application/xml+rss 或 application/atom+xml:仅当站点提供 RSS/Atom 订阅时才加入
务必排除的无效类型
这些格式本身已是高压缩编码,Brotli 不仅几乎不减体积,还会白耗 CPU、拖慢响应:
- 所有图片:
image/png、image/jpeg、image/webp - 所有字体:
font/woff2、font/woff、application/font-woff2 - PDF、音视频:
application/pdf、audio/mpeg、video/mp4 - 绝对不要写
brotli_types *—— 这会触发协商失败或缓存异常
MIME 类型写法必须与响应头严格匹配
浏览器依据响应头中的 Content-Type 值匹配 brotli_types,大小写和子类型均敏感:
- 用
application/javascript,不用已弃用的text/javascript(Chrome 早已不认) - 用
image/svg+xml,不能简写为image/svg或svg+xml - 若后端返回
Content-Type: application/json; charset=utf-8,仍只需配application/json—— 参数部分会被忽略
配置位置与生效逻辑
brotli_types 必须配合 brotli on 和 brotli_static off 才能启用动态压缩:
- 放在
http块中:全局生效,适合多数站点 - 放在
location块中:实现路径级控制,例如只为/api/启用 JSON 压缩 - 不支持在
if或嵌套条件中使用,否则会报错或静默失效











