不建议为 woff2 字体启用 nginx brotli 压缩,因其本身已强制采用 brotli 预压缩;二次压缩无效且增耗 cpu、延迟,应从 brotli_types 中排除 font/woff2,转而通过构建阶段子集化+woff2 封装优化体积。

不建议在 Nginx 中为 WOFF2 字体文件启用 Brotli 压缩。
WOFF2 本身已是 Brotli 压缩格式
WOFF2 规范强制要求使用 Brotli 算法对字体数据进行预压缩。浏览器加载 .woff2 文件时,直接解压内置的 Brotli 流——它不是“原始字体+额外压缩”,而是“字体→Brotli 编码→封装为 WOFF2 容器”。因此:
- 再用 Nginx 的
brotli on对font/woff2响应做动态压缩,等于对已压缩数据二次压缩 - 实测结果:体积基本不变甚至略增,CPU 白耗显著,响应延迟升高
- 部分旧版 ngx_brotli 模块还会因二进制结构误判导致压缩失败或返回损坏流
正确做法:跳过 WOFF2 的 Brotli 类型配置
在 brotli_types 列表中明确排除 font/woff2,保持默认不处理即可:
brotli on; brotli_comp_level 6; brotli_types text/plain text/css application/javascript application/json image/svg+xml text/html; # 不写 font/woff2、font/woff、application/font-woff2 等任何字体类型
这样既避免无效计算,也防止与 WOFF2 内置压缩逻辑冲突。
若需进一步减小字体体积,请从源头优化
真正有效的压缩发生在构建阶段,而非运行时:
- 用
google-fonts-helper或fonttools子集化字体(只保留中文/英文字母/数字/常用符号) - 导出时选择 WOFF2 格式,并启用最高压缩质量(如 fonttools 的
--compress-level 11) - 确保 Nginx 正确声明 MIME 类型:
types { font/woff2 woff2; },使响应头为Content-Type: font/woff2
例外情况:仅当使用非标准 WOFF2 封装时才谨慎评估
极少数自定义工具生成的 WOFF2 可能未启用 Brotli(如用 zlib 打包),此时可临时加入 font/woff2 并验证效果。但必须配合真实压测(对比体积、首字节时间、CPU 使用率),且上线前确认所有主流浏览器兼容性无异常。











