news 2026/8/25 10:20:16

nginx - 开启 gzip 压缩

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
nginx - 开启 gzip 压缩

文章目录

    • 一、 服务器端开启 Gzip 压缩
    • 二、 客户端开启 Gzip 压缩(也需要配置 nginx)
    • 三、总结
      • 1️. `vite-plugin-compression` 的作用
      • 2️. Nginx Gzip 压缩与插件的区别
      • 3️. 实际项目选择建议
    • 四、常见问题
      • 1️. Nginx 配置作用域规则
      • 2. `gzip_static on;` 的作用
      • 3. `gzip_static on; + 静态压缩文件` 与 `gzip on;` 同时存在?

在前端项目中,JS/CSS文件较大时,启用Gzip压缩可以显著减少传输体积,提高页面加载速度。
下面我以Vue3项目 为例,讲解如何在 本地 Nginx 环境下开启 Gzip,并验证效果。

开启 gzip 压缩有两种方式:

  1. 服务器端开启 Gzip 压缩
  2. 客户端开启 Gzip 压缩

但都要在nginx中配置,才能生效。

一、 服务器端开启 Gzip 压缩

将 Vue3 打包目录拷贝到 Nginx 的部署目录,我这里是D:\Deploy\vue3

编辑Nginx配置nginx.conf,添加server配置:

server{listen8080;server_name localhost;# 压缩开启 [!code highlight:5]gzipon;# 开启 gzipgzip_vary on;# 根据 Accept-Encoding 缓存不同版本gzip_min_length1024;# 小于 1KB 的不压缩gzip_comp_level6;# 压缩等级gzip_types text/plain text/css application/javascript application/json text/html application/xml image/svg+xml;location /{try_files$uri$uri/ /index.html;}# vue3项目location /vue3/{aliasD:/Deploy/vue3/;try_files$uri$uri/ /index.html;index index.html index.htm;}}

配置解释:

  • gzip on:开启 Gzip 压缩
  • gzip_types:指定压缩的文件类型
  • try_files $uri $uri/ /index.html:Vue3 history 模式路由支持

启动 Nginx 后,访问http://localhost/vue3/,查看Network面板,查看JS/CSS文件响应头的字段content-encodinggzip,说明开启了 Gzip 压缩。

如果没有content-encoding字段,说明未成功开启gzip

如下所示(成功开启):

未成功开启:

二、 客户端开启 Gzip 压缩(也需要配置 nginx)

客户端开启 Gzip 压缩,需要在使用第三方插件在打包构建时就需要生成对应的.gz文件。我的 vue3 项目使用的是vite-plugin-compression,在 vite.config.ts 中这样配置:

importcompressionPluginfrom"vite-plugin-compression";exportdefaultdefineConfig({plugins:[// gzip压缩ViteCompression({verbose:true,// 是否在控制台输出压缩结果disable:false,// 是否禁用threshold:1024,// 体积大于 threshold 才会被压缩,单位 balgorithm:"gzip",// 压缩算法,可选 [ 'gzip' , 'brotliCompress' ,'deflate' , 'deflateRaw']ext:".gz",// 生成的压缩包后缀deleteOriginFile:false//压缩后是否删除源文件})]});

运行vite build打包项目,会在dist目录下生成对应的.gz文件。

如下所示:

然后在 nginx 中配置gzip ongzip_static on;,开启直接返回.gz文件的功能。

server{listen80;server_name localhost;# 压缩开启 [!code highlight:2]gzipon;gzip_static on;# 直接返回 .gz 文件location /{try_files$uri$uri/ /index.html;}# vue3项目location /vue3/{aliasD:/Deploy/vue3/;try_files$uri$uri/ /index.html;index index.html index.htm;}}

最后访问部署的项目http://localhost/vue3/,查看Network面板,查看JS/CSS文件响应头的字段content-encodinggzip,说明开启了 Gzip 压缩。

如下所示:

三、总结

1️.vite-plugin-compression的作用

  • 构建阶段就把静态资源(JS/CSS/HTML)生成压缩文件(如.gz.br)。

  • 优点:

    • 浏览器访问时直接获取压缩文件,不需要 Nginx 或其他服务器再压缩
    • 减少服务器 CPU 消耗,适合高并发场景
  • 缺点:

    • 文件体积会多一份(原文件 + 压缩文件)
    • 部署时服务器需要正确配置,让.gz文件直接返回给浏览器

2️. Nginx Gzip 压缩与插件的区别

特性Nginx Gzipvite-plugin-compression
压缩时机请求时(服务器动态压缩)构建时(生成静态压缩文件)
CPU 消耗高并发时占用服务器 CPU构建阶段消耗 CPU,运行时几乎零消耗
配置复杂度简单:gzip on+gzip_types需要插件 + 配置 Nginx 支持.gz文件
文件存储不占额外磁盘空间占额外空间(生成.gz文件)
性能小文件差异不大,长连接 + HTTP2 可快速传输高并发大文件优势明显

3️. 实际项目选择建议

  1. 本地开发或小型项目

    • 只使用Nginx Gzip就够了
    • 简单配置即可,无需插件
  2. 大型项目 / 高并发部署

    • 推荐在构建阶段生成压缩文件vite-plugin-compression

    • 配合 Nginx 配置:

      location /assets/ { gzip on; gzip_static on; # 直接返回 .gz 文件 expires 1y; add_header Cache-Control "public, immutable"; }
    • 优点:请求时不再动态压缩,CPU 占用低,性能更稳定

四、常见问题

1️. Nginx 配置作用域规则

  • Nginx 配置指令有全局、http、server、location作用域

  • 某些指令只能在 http/server 级别生效,或者全局继承

  • gzip on;指令就是典型例子:

    • 可以在httpserver块中开启
    • location 块中开启,有些版本/编译方式不生效,导致 gzip header 不加

官方文档也说明:gzip可以在 http、server 或 location 块启用,但有些版本 location 中开启可能不触发gzip_staticContent-Encoding逻辑

2.gzip_static on;的作用

如果请求的文件存在.gz压缩文件,直接返回该文件给浏览器。

请求流程(开启 gzip_static)

  1. 浏览器请求资源app.js,并发送Accept-Encoding: gzip

  2. Nginx 检查:

    • 是否存在app.js.gz
    • 浏览器是否支持 gzip
  3. 如果条件满足:

    • 返回app.js.gz文件内容
    • 必须开启全局gzip on;才会自动添加Content-Encoding: gzip响应头
  4. 浏览器收到响应后自动解压显示

3.gzip_static on; + 静态压缩文件gzip on;同时存在?

优先级原则

  1. 如果请求的资源存在.gz文件,且浏览器支持 gzip

    • Nginx优先使用.gz文件(gzip_static)
    • gzip on不会再次压缩.gz文件
  2. 如果请求的资源没有.gz文件

    • Nginx 会使用gzip on对原文件进行动态压缩

注意:

想要开启gzip压缩,gzip on;必须开启全局,才能自动添加Content-Encoding: gzip响应头。
只有gzip_static是不会生效的。


🚀 感谢阅读!想了解更多?

📖 我的博客网站 | 记录思考,分享干货
🏡 我的个人主页 | 关于我、开源项目


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/25 10:18:15

基于OpenClaw构建企业级智能体:从架构解析到医疗场景实战

1. 项目概述:从OpenClaw看企业智能化的新范式最近在跟几个做企业服务和医疗信息化的朋友聊天,大家不约而同地提到了一个词:智能体平台。这不再是前几年那种飘在天上的“AI概念”,而是实打实地开始进入项目交付清单,解决…

作者头像 李华
网站建设 2026/8/25 10:15:06

基于QClaw的动漫资源自动化追踪与推送系统实战指南

1. 项目缘起:从“追番焦虑”到自动化解决方案作为一个老二次元,我敢说每个追番人都有过类似的烦恼:每周要手动去各个平台、论坛、资源站翻找最新一集,生怕错过更新;遇到喜欢的冷门作品,更是要像侦探一样四处…

作者头像 李华
网站建设 2026/8/25 10:13:48

CAS协议验证接口完整指南:serviceValidate与proxyValidate详解

CAS协议验证接口完整指南:serviceValidate与proxyValidate详解 【免费下载链接】rubycas-server Provides single sign-on authentication for web applications, implementing the server-end of Jasigs CAS protocol. 项目地址: https://gitcode.com/gh_mirrors…

作者头像 李华
网站建设 2026/8/25 10:09:54

PMP实战:项目相关方管理从理论到落地的全流程指南

1. 项目相关方管理:从“纸上谈兵”到“实战破局”在项目管理领域,PMP认证几乎是所有从业者都绕不开的一个话题。最近,关于PMP的讨论又热了起来,特别是像“张雪峰谈PMP的利弊”这类话题,让很多人重新审视这张证书的价值…

作者头像 李华
网站建设 2026/8/25 10:09:46

工业级PDA H5扫码方案:JSBridge打通Web与原生硬件

1. 项目概述:当工业级扫码终端遇上H5最近在做一个挺有意思的项目,客户那边有一批IData T1工业级PDA,他们希望能在设备自带的浏览器里,直接运行一个H5页面来完成扫码作业。听起来简单,不就是调用摄像头扫个码嘛&#xf…

作者头像 李华