Nginx gzip压缩调优,文本、json

Nginx 开启 gzip 压缩后,浏览器下载 HTML、JSON、CSS 等文本资源的体积能减少 60% 以上,而图片这类本身已经压缩过的文件却不需要再压。
本文会带你完成文本、JSON、HTML 的压缩开启,同时让图片跳过 gzip,并提供验证方法和常见避坑点。

Nginx gzip 压缩适合处理哪些资源

gzip 的核心原理是在服务端对响应内容压缩,再交给浏览器解压展示。
对于含有大量重复字符的文本类资源,压缩效果非常明显,例如普通网页 HTML、接口返回的 JSON、CSS、JavaScript。
这些资源往往体积不大但加载频率高,开启 gzip 后能显著减少带宽占用和首屏等待时间。

图片则完全不同。
JPG、PNG、WebP 这类格式在生成时已经做了针对性压缩,如果再用 gzip 处理,体积不会明显变小,反而会让服务器消耗额外的 CPU 去反复压缩。
所以业界普遍做法是文本开压缩、图片跳过。

开启 gzip 前先确认两件事

第一,确认 Nginx 已安装 ngx_http_gzip_module 模块。
默认官方源安装的 Nginx 都自带这个模块,不用担心。
可以用下面命令查看:

nginx -V 2>&1 | grep http_gzip_module

第二,找到 Nginx 的主配置文件。
通常是 /etc/nginx/nginx.conf,或者被拆分的 /etc/nginx/conf.d/ 下的站点配置。
如果你用的是宝塔面板,可以在“网站-设置-配置文件”里看到当前站点的 Nginx 配置。

文本、JSON、HTML 开启 gzip 的配置示例

在 Nginx 配置文件的 http 块(如果只在单个站点生效,放在 server 块也可以)中添加以下配置:

gzip on;
gzip_comp_level 5;
gzip_min_length 1k;
gzip_vary on;
gzip_types text/plain text/css application/json application/javascript application/xml image/svg+xml;

各项参数说明如下:

  • gzip on:开启压缩功能。
  • gzip_comp_level 5:压缩级别,范围 1-9。级别越高压缩率越大,但 CPU 消耗也越高。生产环境推荐 5,兼顾效果和性能。
  • gzip_min_length 1k:只有响应体大于 1KB 才压缩,避免压缩过小文件浪费 CPU。
  • gzip_vary on:让响应头带上 Vary: Accept-Encoding,方便缓存服务器正确处理。
  • gzip_types:声明需要压缩的 MIME 类型。这里包含了纯文本、CSS、JSON、JavaScript、XML 和 SVG。其中 text/html 默认就会压缩,所以不用额外列出。

修改完成后,先测试配置语法再重载:

nginx -t
nginx -s reload

如果输出 syntax is ok 就说明配置没有问题。

为什么图片要跳过 gzip 压缩

图片不加入 gzip_types 列表,就是让 Nginx 不压缩图片。
有朋友会问:如果用户请求的是 JPG,Nginx 会强行压缩吗?
不会,gzip_types 里没有声明 image/jpegimage/png,Nginx 就不会对这类响应启用 gzip。

强行压缩图片不仅体积改善极小,还会让服务器多做无用功。
尤其是图片很多、访问量又大的站点,关闭图片压缩能省下不少 CPU。
如果你后续发现图片响应头里出现了 Content-Encoding: gzip,说明配置中混入了图片类型,需要立即移除。

配置后如何验证压缩是否生效

打开终端,用 curlAccept-Encoding 发起请求,看响应头:

curl -I -H "Accept-Encoding: gzip" https://你的域名/example.json

如果响应头里包含 Content-Encoding: gzip,并且能看到 Vary: Accept-Encoding,说明 gzip 已经生效。
只看 HTML 页面同理:

curl -I -H "Accept-Encoding: gzip" https://你的域名/

对于图片资源,请求一张 JPG 图片,响应头里不应该出现 Content-Encoding: gzip,只保持原始图片类型即可。

另外还可以用浏览器开发者工具验证:打开“网络”面板,刷新页面,点击一个文本资源,查看“响应头”里的 Content-Encoding 是否为 gzip

容易踩的坑和延伸建议

gzip 配置最常踩的坑有三个:

一是把 gzip_types 写成了大文件类型列表,比如误把 application/octet-stream 加进去,导致所有下载类文件都被压缩,既浪费 CPU 又可能破坏文件传输。
建议只保留文本类资源。

二是 gzip_comp_level 设置过高。
级别 9 在实际场景中并不能比级别 5 多压缩多少,但 CPU 占用会明显上升。
建议保持 5,除非你对压缩率有特殊要求。

三是改了配置后忘记 nginx -t 就直接重载。
语法错误会导致 Nginx 无法启动,影响线上服务。
一定要先测试再 reload。

如果你对性能调优有更高要求,还可以研究 gzip_static 模块——提前生成 .gz 文件让 Nginx 直接返回,但那是另一个话题了。

结论: Nginx gzip 压缩机智地聚焦文本、JSON、HTML,跳过图片,能获得明显的访问提速体验。
配置核心只有 gzip ongzip_types 和验证命令,按本文步骤执行后就能看到可测量的压缩响应头。

分享到:
上一篇
Redis集群部署,三主三从生产最小集群配置
下一篇
KVM虚拟机网卡多队列virtio‑net‑queues提升
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意