Nginx 对新兴静态格式启用 gzip 压缩需满足两个前提:一是该格式适合压缩(如文本类的 .wat、YAML、JSON Schema、JSON-LD 等),二是其 MIME 类型被正确识别并显式加入 gzip_types;已高度压缩的二进制格式(WebP、AVIF、WOFF2、.wasm)不应 gzip。

要让 Nginx 对新兴静态格式(如 WebP 图片、AVIF、现代字体、WebAssembly 模块等)启用自动 gzip 压缩,关键不是“扩展 gzip_types 就能压缩一切”,而是明确两点:第一,这些资源是否适合 gzip 压缩;第二,它们的 MIME 类型是否被正确识别并显式加入 gzip_types。
哪些新兴格式值得且可以 gzip 压缩
gzip 对已高度压缩的二进制格式(如 JPEG、PNG、WebP、AVIF、MP4)基本无效,甚至可能略微增大体积。真正适合 gzip 的是文本类或结构化数据类新兴格式:
-
WebAssembly(.wasm):WAT 文本格式已少见,但 .wasm 文件本身是二进制,不建议 gzip;不过若你提供的是可读的
.wat源码文件(MIME:text/wat),则应加入 gzip_types。 -
现代字体:
.woff2内置 Brotli 压缩,.woff已含 zlib 压缩,无需再 gzip;但.ttf和.otf是未压缩字体,可考虑(MIME:font/ttf、font/otf),不过实际收益有限,更推荐用 woff2。 -
JSON Schema、OpenAPI/YAML、TOML 配置文件:若通过 HTTP 提供(如
/api/spec.yaml,MIME:application/yaml或application/x-yaml),属于纯文本,应加入。 -
自定义文本 API 响应:如返回
application/vnd.api+json(JSON:API)或application/ld+json(JSON-LD),只要内容本质是 JSON,就应覆盖。
正确添加 MIME 类型到 gzip_types
Nginx 不会自动推断扩展名对应的 MIME 类型——它依赖 mime.types 文件定义,以及你在 gzip_types 中的显式声明。操作步骤如下:
- 确认目标格式的标准化 MIME 类型(例如:
application/wasm、application/yaml、application/ld+json); - 检查
/etc/nginx/mime.types是否已包含该类型(多数新版 Nginx 已支持application/wasm和application/yaml); - 在
http或server块中,将类型追加到gzip_types列表(不要删掉原有必需项):
gzip_types text/html text/plain text/css application/javascript application/json application/xml text/xml application/yaml application/ld+json application/wasm;
⚠️ 注意:application/wasm 虽然标准,但因 .wasm 是二进制,开启后实际无压缩效果,反而增加 CPU 开销,除非你明确提供的是文本 wasm 源码(.wat),此时应使用 text/wat 并确保 mime.types 中有定义。
验证与调试要点
配置完成后,必须验证是否生效,不能仅凭配置存在就认为成功:
- 用
curl -H "Accept-Encoding: gzip" -I https://yoursite.com/example.yaml查看响应头是否含Content-Encoding: gzip; - 对比
Content-Length与原始文件大小,确认有明显下降(文本类通常压缩率 60–75%); - 若未生效,优先检查:
–gzip on;是否启用(父级作用域是否被覆盖);
–gzip_min_length是否过大(默认仅 20 字节,但有些配置设为 1k);
– 请求是否命中了未配置gzip_types的location块;
– 浏览器或 CDN 是否缓存了未压缩版本(加curl -H "Cache-Control: no-cache"绕过)。
替代方案:对高价值文本资产预压缩更高效
对于频繁访问、变动少的新兴文本资源(如 OpenAPI 文档、i18n JSON 包),更推荐前端构建时生成 .gz 文件,并启用 gzip_static on;。这样 Nginx 直接返回预压缩文件,零运行时开销,且兼容性更好。例如:
- 构建输出:
docs/openapi.json+docs/openapi.json.gz; - Nginx 配置:
gzip_static on;(位置同 gzip 配置); - 无需在
gzip_types中额外加application/json—— 它只控制动态压缩,不影响gzip_static行为。










