Nginx的gzip_types仅匹配Content-Type响应头中的MIME类型,不识别文件后缀,也不支持通配符;需显式列出text/css、application/json等类型,并确保后端真实返回对应MIME,同时排除image/jpeg等已压缩格式。

关键不是“哪些文件后缀”,而是“哪些 Content-Type 响应头”。Nginx 的 gzip_types 完全依据后端返回的 MIME 类型做匹配,不看 .js、.css 这类扩展名,也不支持通配符(如 text/*)。
必须显式列出所有需要压缩的类型
默认只压缩 text/html。哪怕你开了 gzip on,JS、CSS、JSON 等资源也不会被压——除非你在 gzip_types 里明确写上对应 MIME 类型:
-
text/plain(纯文本、API 原始响应) -
text/css、text/javascript -
application/javascript(现代标准,比text/javascript更推荐) -
application/json、application/xml、text/xml -
image/svg+xml(SVG 是文本格式,务必加入) -
application/rss+xml、application/atom+xml
务必确认 MIME 类型真实生效
写了 application/json 没用,如果后端返回的是 text/plain 或 application/octet-stream,照样不压缩。你需要:
- 检查
/etc/nginx/mime.types是否正确定义了扩展名与 MIME 的映射,例如:types { application/json json; text/markdown md; } - 用
curl -I https://yoursite.com/api/data查看实际响应头中的Content-Type - 对自定义类型(如
application/typescript),必须在mime.types和gzip_types中名称完全一致(区分大小写)
明确排除已压缩的二进制格式
这些类型本身已是高压缩编码,Gzip 不仅无效,还会白耗 CPU、增加延迟:
- 图片:
image/jpeg、image/png、image/webp、image/avif - 视频:
video/mp4、video/webm - 字体:
font/woff、font/woff2(WOFF2 本身含压缩,再 Gzip 可能反增体积) - 归档:
application/zip、application/gzip
配置位置与基础依赖
gzip_types 必须配合以下指令才真正起作用:
-
gzip on;—— 开关总控 -
gzip_min_length 1024;—— 小于 1KB 的响应不压(避免小文件压缩开销反超收益) - 放在
http块(全局)或server块(单站)内,不能单独放在location中


















