gzip_types指令用于指定Nginx响应中被Gzip压缩的MIME类型,默认仅压缩text/html;必须显式列出如text/css、application/javascript等类型,依赖Content-Type响应头匹配,不识别文件扩展名,且需配合gzip on和mime.types映射生效。

在 Nginx 中,gzip_types 指令用于明确指定哪些 MIME 类型的响应内容会被启用 Gzip 压缩。它不会自动压缩所有文件,而是依赖于响应头中的 Content-Type 值是否匹配你配置的类型列表。正确设置 gzip_types 是提升网页加载速度、减少带宽消耗的关键一步。
理解 gzip_types 的作用机制
gzip_types 本身不识别文件扩展名(如 .js、.css),而是依据后端(或 Nginx 自动判断)生成的 Content-Type 响应头来决定是否压缩。例如,一个 .js 文件若被标记为 Content-Type: application/javascript,那只有当你在 gzip_types 中包含 application/javascript 时,它才会被压缩。
默认情况下,Nginx 只压缩 text/html,其他类型必须显式添加。忽略这一点常导致 JS、CSS、JSON 等资源未被压缩。
常用且推荐配置的 MIME 类型
以下类型覆盖绝大多数现代 Web 资源,建议按需加入(注意:类型名称需准确,区分大小写和斜杠):
-
文本类:
text/plain、text/css、text/javascript、text/xml、text/csv -
脚本与数据:
application/javascript、application/json、application/xml、application/rss+xml -
字体(可选,部分场景有用):
font/woff、font/woff2(注意:WOFF2 本身已压缩,通常不建议再 Gzip)
⚠️ 注意:application/x-javascript 是旧标准,现代应优先用 application/javascript;text/html 可省略(默认已启用),但显式写出更清晰。
在配置中正确启用并测试
确保 gzip 已开启,并在 http、server 或 location 块中配置 gzip_types:
gzip on; gzip_vary on; gzip_min_length 1024; gzip_types text/plain text/css application/javascript application/json application/xml text/xml;
修改后重载配置:sudo nginx -t && sudo systemctl reload nginx。
验证方法:
- 用浏览器开发者工具 → Network 标签页,查看某 JS/CSS 请求的响应头是否有
Content-Encoding: gzip - 用 curl 检查:
curl -H "Accept-Encoding: gzip" -I https://yoursite.com/script.js,观察返回头
常见问题与避坑提示
以下情况会导致压缩失效,需逐一排查:
-
静态文件由其他服务提供(如 Node.js 后端直接返回 JSON):确保该服务未自行设置
Content-Encoding,否则 Nginx 不会二次压缩 -
gzip_min_length 设置过大:小文件(如空 CSS 或短 JSON)可能因低于阈值被跳过,建议设为
1024或更低 -
location 块中覆盖了上级 gzip 配置:若在某个
location里写了gzip off或未继承gzip_types,需显式重新声明 -
MIME 类型不匹配:检查实际响应头中的
Content-Type(例如某些 PHP 脚本可能输出text/plain而非application/json)


















