news 2026/10/15 8:54:49

Nginx gzip 压缩:一个配置让页面加载快 3 倍

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Nginx gzip 压缩:一个配置让页面加载快 3 倍

背景
监控大屏首页加载慢,F12 一看:

chart.min.js:200KB

index.html:5KB

加上 CSS、字体,一共 250KB+

服务器带宽不大,每次加载都要等。

想做到:让 Nginx 自动压缩响应,减少传输量。

解决
一、基础配置
在 /etc/nginx/nginx.conf 的 http 块里加:

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

改完:

sudonginx-t&&sudosystemctl reload nginx

二、每个指令干什么

指令作用
gzip on开启 gzip
gzip_vary on加Vary: Accept-Encoding,让 CDN/代理正确缓存
gzip_comp_level 5压缩级别 1-9,5 是速度和压缩比的最佳平衡
gzip_min_length 1024小于 1KB 不压缩(压缩后反而更大)
gzip_types哪些 MIME 类型要压缩

关键点:gzip_types 默认只压 text/html,JS / CSS / JSON 都要显式加。

三、验证生效

# 看响应头有没有 Content-Encoding: gzipcurl-s-H"Accept-Encoding: gzip"-D--o/dev/null https://example.com/static/chart.min.js|grep-iencoding

期望:

content-encoding: gzip

对比压缩前后大小:

# 不压缩curl-s-o/dev/null-w"原始: %{size_download} bytes\n"https://example.com/static/chart.min.js# 压缩curl-s-H"Accept-Encoding: gzip"-o/dev/null-w"压缩: %{size_download} bytes\n"https://example.com/static/chart.min.js

典型输出:

原始: 205000 bytes 压缩: 65000 bytes

压缩到 1/3。

验证效果

文件原始gzip 后压缩比
chart.min.js205KB65KB68%
index.html5KB1.5KB70%
style.css30KB8KB73%
合计240KB75KB69%

页面加载时间:

改造前:2.1s

改造后:0.7s

3 倍提速,一行配置的事。

三个坑
坑 1:gzip_types 忘了加 JS
Nginx 默认只压 text/html。application/javascript 不加,chart.min.js 就白压了。

验证方法:

curl-s-H"Accept-Encoding: gzip"-D--o/dev/null https://example.com/static/chart.min.js|grep-iencoding

没输出 = 没压缩。

坑 2:gzip_comp_level 调到 9
级别越高越耗 CPU。级别 9 比级别 5 只多压 3%,但 CPU 多花 50%。

建议:

静态资源:级别 5~6

动态响应(API):级别 3~4

小学生版解释:

抽真空 90% 就够了,非要抽到 99% 得花大力气,收益很小。

坑 3:已经压缩的文件又压一遍
如果你有 .gz 预压缩文件(比如构建时生成),要用 gzip_static 直接发,不要再压。

gzip_static on;

效果:Nginx 优先找 chart.min.js.gz,直接发送,省 CPU。

适合:静态资源多、构建流程能生成 .gz 的场景。

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

佛山产业带工厂怎么做国际 AI 平台:ChatGPT、Gemini、Perplexity、Copilot 引用规则与动作

佛山的产业带工厂——建材陶瓷、家电厨卫、五金卫浴——想让海外采购商在 ChatGPT、Gemini、Perplexity、Copilot 里问到时看到自己,先得搞懂这四个平台各读什么。本文按平台讲引用规则和工厂动作,结合佛山产业带给可核对的落地清单。一、四个平台的引用…

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

SQLite FTS5 context-mode触发原理与BM25实战调优

1. “context-mode”不是功能开关,而是SQLite FTS5全文检索的底层执行范式 你第一次在SQLite文档里看到“context-mode”这个词,大概率会以为它是个可配置的布尔开关——就像 PRAGMA journal_mode WAL 那样,设成 ON 或 OFF 就能启用某…

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

SpringBoot+Vue电商平台架构设计与实战

1. 项目概述:企业级电商平台的技术选型与架构设计这套基于SpringBootVueMyBatisMySQL的电商管理系统源码,是当前中大型电商项目的主流技术方案。我在三个千万级PV的电商项目中验证过这套架构的可靠性,它能支撑日均10万订单量的业务场景。核心…

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

电力系统时序相关性MC场景生成与削减技术解析

1. 项目背景与核心价值时序相关性MC(Monte Carlo)场景生成与削减技术是电力系统规划与运行中的关键支撑方法。这项研究主要解决新能源高比例接入背景下,电力系统面临的不确定性挑战。传统场景生成方法往往忽略风光出力、负荷变化的时序特性&a…

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

Flutter应用编译为HarmonyOS的环境搭建指南

1. 项目背景与目标解析开源鸿蒙(OpenHarmony)作为新一代分布式操作系统,其跨平台开发能力正在快速演进。本次训练营Day3的核心任务,是解决Flutter应用编译为HarmonyOS应用时的环境搭建难题。这实际上涉及两个生态系统的对接&#…

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

string和byte的相互转换

string和byte的相互转换package mainimport ("fmt" )func main() {ch1 : ach2 : bfmt.Printf("ch1的类型是: %T, ch2的类型是: %T\n", ch1,ch2)fmt.Printf("ch1的数值是: %c, ch2的数值是: %c\n", ch1,ch2)// byte 转换为 字符串⬇️str1 : stri…

作者头像 李华