必须显式配置gzip_types才能压缩CSS和JS,因Nginx默认仅压缩text/html;需准确添加text/css和application/javascript等MIME类型,并通过curl实测Content-Encoding: gzip响应头验证。

直接启用 gzip on 不足以压缩 CSS 和 JS 文件——必须显式配置 gzip_types,否则 Nginx 默认只压缩 text/html,其他类型全部跳过。
关键配置:必须写全 MIME 类型
JS 和 CSS 的压缩失效,90% 是因为 gzip_types 漏掉了对应类型。Nginx 不会自动识别 .js 或 .css 后缀,只认 MIME 类型:
-
text/css—— 标准 CSS 类型,不能省略或简写为css -
application/javascript—— 现代推荐写法,比过时的text/javascript更可靠 - 可一并加入:
text/plain application/json text/xml application/xml+rss(按需)
合理设置压缩参数,避免得不偿失
压缩不是越狠越好,尤其对 JS/CSS 这类文本资源:
-
gzip_comp_level 4–6是最佳区间:level 6 已逼近压缩极限,再提 level 7–9 几乎不减体积,CPU 却明显升高 -
gzip_min_length 1000(即 1KB):防止小文件因 gzip 头开销反而变大 -
gzip_buffers 64 4k:若站点含大量微前端 chunk 或小资源,可避免 “gzip buffer too small” 警告 -
gzip_vary on必须开启:让 CDN 或代理知道响应随Accept-Encoding变化,避免缓存错乱
验证是否真正生效
别只看配置写了没,要实测响应头:
立即学习“Java免费学习笔记(深入)”;
- 终端执行:
curl -H "Accept-Encoding: gzip" -I https://yoursite.com/app.js - 检查返回头中是否有:
Content-Encoding: gzip - 同时确认
Content-Type是application/javascript或text/css,否则说明 MIME 匹配失败
进阶建议:静态压缩(gzip_static)可选但推荐
如果你用构建工具(如 Vite、Webpack)已生成 .js.gz 和 .css.gz 文件,并和原文件放在同一目录:
- 加一行
gzip_static on;,Nginx 会优先返回预压缩文件,省去运行时 CPU 开销 - 它和动态
gzip on不冲突,而是互补:找不到 .gz 才回退到实时压缩 - 注意:不要删原始 .js/.css 文件(例如 vite-plugin-compression 中设
deleteOriginFile: false)


















