Nginx 不对 JPG/PNG 等已压缩图片启用 Brotli,因其二进制格式已高效压缩,再压徒增 CPU 开销;真正受益的是 SVG(XML 文本)、内联 Base64 图片、CSS/JS 中的图片路径及 JSON 图片元数据等文本类图片关联内容,需在 brotli_types 中显式包含 image/svg+xml 和 application/json,排除 image/jpeg 等无效类型,并配合哈希命名与 immutable 缓存优化图片文件本身。

Nginx 本身不为 JPG、PNG 等已压缩图片格式启用 Brotli 压缩,因为这类二进制格式(如 JPEG、PNG、GIF、WebP)在生成时已完成高效压缩,再用 Brotli 处理不仅无效,还会徒增 CPU 开销、延长响应时间。Brotli 的价值在于文本类资源——它对 SVG(XML 格式)、内联 Base64 图片、CSS/JS 中的图片路径或数据、以及 API 返回的 JSON/XML 图片元数据等,才有明显收益。
哪些图片相关资源能真正受益于 Brotli
需明确区分“图片文件”和“图片承载的文本内容”:
-
SVG 文件:本质是 XML 文本,Brotli 压缩率通常比 Gzip 高 20%+,务必加入
brotli_types - HTML 页面中内联的 Base64 图片:大段 ASCII 字符串,压缩空间显著
- CSS/JS 文件里的图片 URL、尺寸声明、响应式参数:文本部分可被压缩
-
API 接口返回的图片信息:如
{"url":"/img/logo.png","width":120,"alt":"logo"}这类 JSON,适合设brotli_types application/json
正确配置 Brotli 支持图片关联文本
在 http{} 块中统一设置(无需写在图片 location 内):
brotli on; brotli_comp_level 6; brotli_min_length 256; brotli_types text/html text/css application/javascript application/json image/svg+xml;
关键点:
- 显式包含
image/svg+xml,否则 SVG 不会压缩 - 不添加
image/jpeg或image/png—— Nginx 会忽略,且可能触发警告 -
brotli_min_length 256避免对极小 SVG 或空响应做无效压缩
图片文件本身该怎么做缓存优化
既然不能压,就让浏览器少请求、本地多留:
- 对
.jpg/.png/.webp/.gif/.svg等后缀,用expires 1y+Cache-Control: public, immutable - 搭配文件哈希命名(如
logo.a1b2c3.png),确保更新后缓存自动失效 - 启用
open_file_cache加速磁盘读取:open_file_cache max=10000 inactive=60s; - 关闭无关模块:
image_filter等若未使用,应彻底移除,避免干扰
如果想让图片传输更轻量,该走哪条路
Brotli 不是图片压缩的解法,但你可以组合其他手段:
- 服务端预转 WebP/AVIF:用
image_filter或构建时批量处理,Nginx 直接分发更小格式 - CDN 自动格式协商:通过
Vary: Accept+ 请求头识别,由 Cloudflare、又拍云等自动回源并缓存 WebP 版本 - 客户端按需加载:HTML 中用
<picture>+srcset,让浏览器选最适配格式


















