Nginx启用Gzip压缩需先确认模块存在(nginx -V | grep with-http_gzip_module),再在http块中配置gzip on、gzip_types application/javascript等参数,漏配或错配会导致Vue的JS文件不压缩;验证需检查响应头Content-Encoding: gzip。

直接在 http 或 server 块里加几行配置就能生效,但错配 gzip_types 或漏掉 application/javascript 会导致 Vue 的 .js 文件不压缩,白忙一场。
确认 Nginx 已编译 gzip 模块
不是所有 Nginx 都默认带这个功能。执行:nginx -V 2>&1 | grep -o with-http_gzip_module
如果没输出,说明模块缺失,需重编译并加上 --with-http_gzip_module 参数。宝塔面板用户可在「软件商店 → Nginx → 设置 → 编译扩展」里勾选启用。
必须写对的 gzip_types 才能压中 Vue 资源
Vue CLI 打包出的 JS 文件 MIME 类型是 application/javascript,不是 text/javascript(后者已过时)。只写 text/js 或漏掉它,app.xxx.js 和 chunk-vendors.xxx.js 就不会被压缩。
推荐明确列出以下类型:
text/plaintext/cssapplication/javascript-
text/javascript(兼容旧配置) application/jsonapplication/xmltext/xmlimage/svg+xml
不要往里面加 image/jpeg、font/woff2 等二进制类型——它们本身已压缩,再压反而浪费 CPU 且无效。
gzip_min_length 和 gzip_comp_level 的实用取值
gzip_min_length 1024 是关键阈值:小于 1KB 的响应不压缩。Vue 的 index.html 通常刚过这个线,但某些小图标内联 CSS 或空响应可能低于它,跳过压缩反而是合理行为。gzip_comp_level 6 是速度与压缩率的平衡点。设成 9 会让 CPU 占用明显升高,而体积只比 6 小 3%~5%,对首屏意义不大;设成 1 则压缩率太低,JS 文件可能只缩 20%。
验证是否真生效,别信“配置 reload 了就行”
浏览器 Network 面板里点开一个 .js 或 .css 请求,看响应头是否有:Content-Encoding: gzip
同时对比 Size(传输大小)和 Content-Length(原始大小),差值应明显(比如 300KB → 90KB)。
命令行快速验证:curl -I -H "Accept-Encoding: gzip" https://yoursite.com/js/app.abc123.js
只要返回头含 Content-Encoding: gzip 就算成功。注意:必须带 -H "Accept-Encoding: gzip",否则 Nginx 默认不主动压缩。
最容易被忽略的是:gzip 配置必须放在 http 块或 server 块顶层,不能塞进某个 location 里——那样只对那个路径生效,而 Vue 的静态资源分散在多个路径下,会漏压。


















