直接在http块配置gzip_types可精准控制Gzip压缩内容,它仅依据响应头Content-Type匹配MIME类型,不识别文件后缀;必须显式列出所有类型(如text/html、application/json等),不可用通配符;漏写text/html将导致HTML失压;需配合gzip on、gzip_min_length、gzip_comp_level、gzip_vary等指令,并通过curl验证Content-Encoding: gzip生效。

直接在 Nginx 的 http 块中配置 gzip_types,就能精准控制哪些响应内容被 Gzip 压缩。它不看文件后缀,只认响应头里的 Content-Type,所以关键不是“写对扩展名”,而是“写对 MIME 类型”且确保 Nginx 能正确识别它。
必须显式列出所有目标类型,不能用通配符
Nginx 不支持 text/*、application/* 这类模糊写法。哪怕只漏掉 text/html,整个 HTML 页面就失去压缩——因为 gzip_types 是覆盖式配置,默认的 text/html 会被完全替代。
- 基础推荐组合:
text/html text/plain text/css text/javascript application/javascript application/json application/xml text/xml application/xml+rss image/svg+xml - 如需支持字体,可加:
application/font-woff2(注意浏览器兼容性) - 避免添加已高压缩格式:
image/jpeg、image/png、video/mp4、application/zip等,否则徒增 CPU 开销,几乎不省带宽
确保 MIME 类型与文件扩展名真实映射
gzip_types 只匹配响应头中的 Content-Type,不解析文件名。如果某个资源(比如 .md 或 .ts)返回的是 application/octet-stream,即使你在 gzip_types 里写了 text/markdown,也不会生效。
- 先检查
/etc/nginx/mime.types(macOS 通常在/usr/local/etc/nginx/mime.types) - 若缺失映射,手动补充,例如:
types {<br> text/markdown md;<br> application/typescript ts;<br>} - 再在
gzip_types中加入对应类型:text/markdown application/typescript
配合其他必要指令才能生效
gzip_types 单独存在是无效的,必须和以下指令共存:
-
gzip on;—— 启用压缩功能 -
gzip_min_length 1024;—— 避免压缩过小响应(如空 JSON) -
gzip_comp_level 6;—— 平衡压缩率与 CPU 消耗(1–9,6 是常用值) -
gzip_vary on;—— 让缓存系统知道响应可能被压缩,避免透传错误
验证是否真正生效
别只看配置是否保存,要实测响应头:
- 用
curl -I -H "Accept-Encoding: gzip" https://yoursite.com/style.css - 确认返回头含:
Content-Encoding: gzip和Vary: Accept-Encoding - 同时检查
Content-Type是否匹配你配置的类型(如text/css) - 若后端(如 CDN 或代理)已返回
Content-Encoding: gzip,Nginx 默认透传,不会重复压缩










