Nginx gzip压缩需按Content-Type而非文件后缀配置gzip_types,必含text/html等基础类型,禁用通配符,排除已压缩二进制格式,确保mime.types映射准确并实测响应头验证。

直接在 Nginx 配置的 http、server 或 location 块中写明要压缩的 MIME 类型即可。关键不是文件后缀(比如 .js 或 .css),而是响应头里的 Content-Type——Nginx 只认这个,不看文件名。
必须显式列出所有需要压缩的类型
gzip_types 是覆盖式配置:一旦启用,就会完全替代 Nginx 默认仅压缩 text/html 的行为。漏掉 text/html,整个 HTML 页面就失去压缩,首屏加载明显变慢。
- 基础必选(建议直接复制):
text/html text/plain text/css text/javascript application/javascript application/json application/xml text/xml application/xml+rss image/svg+xml - 现代前端可加:
text/markdown application/typescript(需先在mime.types中声明映射) - 绝对不要写
text/*或application/*——Nginx 直接忽略,配置无效
明确排除已压缩的二进制格式
JPEG、PNG、GIF、MP4、AVIF、ZIP、PDF、WOFF2 等本身已是高压缩编码,再套 Gzip 几乎不省带宽,反而增加 CPU 开销和传输延迟,甚至可能让体积略微变大。
- 务必剔除:
image/jpeg image/png image/gif video/mp4 application/zip application/pdf font/woff2 application/octet-stream - SVG 是例外:
image/svg+xml是纯文本 XML,必须且应当压缩
确保 MIME 类型真实匹配响应头
写了 text/markdown 没用,如果 .md 文件返回的是 application/octet-stream,Nginx 就不会压缩它——因为它只比对 Content-Type 响应头。
- 先检查
/etc/nginx/mime.types(Linux)或/usr/local/etc/nginx/mime.types(macOS),确认扩展名已正确定义,例如:
types {
text/markdown md;
application/typescript ts;
} - 再在
gzip_types中加入对应项,名称必须完全一致(区分大小写) - 常见映射错误:.js 返回
application/x-javascript而不是application/javascript,需按实际响应头调整
验证是否真正生效
别只信 nginx -t 通过,要实测请求响应头:
- 执行:
curl -I -H "Accept-Encoding: gzip" https://yoursite.com/style.css - 确认返回头含:
Content-Encoding: gzip和Vary: Accept-Encoding - 同时核对
Content-Type: text/css是否与你配置的类型完全匹配


















