Nginx 开启 Gzip 压缩教程:带宽省一半、首屏秒开,一行配置就提速


网站加载慢,很多原因是传输的数据体积太大:HTML、CSS、JS 这些文本类资源动辄几十上百 KB,一个个传到浏览器,带宽和等待时间都上去了。Gzip 是服务器端最经典的压缩方案:把要发送的文本压缩后再传给浏览器,浏览器自动解压。配置得当,页面体积通常能减小 50%-70%,首屏明显变快。这篇文章手把手教你在 Nginx 里开启并调好 Gzip。

一、Gzip 为什么能提速

网上传的 HTML/CSS/JS/JSON/字体(woff)里大量是重复的标签、括号、空白,压缩率极高。服务器用 gzip 压缩后,传输的字节数大幅下降:

  • 带宽占用大幅降低:尤其对海外 VPS 和移动网络,省流量=省成本
  • 首屏更快:下载体积变小,渲染更快
  • 对后端几乎无压力:CPU 微乎其微,换来的提速非常划算

注意:图片、视频等本身已压缩的二进制文件,gzip 意义不大,一般建议只压缩文本类。

二、开启前先确认模块

绝大多数 Nginx 发行版默认都编译了 ngx_http_gzip_module,先确认:

nginx -V 2>&1 | grep -o gzip

能输出 gzip 就说明模块可用,直接用。

确认当前是否已开启:

gzip -r /etc/nginx 或 nginx -T | grep -E 'gzip|gzip_types'

三、基础配置(复制即可用)

在 Nginx 的 http 块(一般是 /etc/nginx/nginx.conf 里)添加:

gzip on;                                  # 开启 gzip 压缩
gzip_min_length 1k;                       # 小于 1K 的不压缩,避免浪费 CPU
gzip_comp_level 6;                        # 压缩级别 1-9,6 是速度/体积的平衡点
gzip_buffers 16 8k;                       # 压缩缓冲
gzip_http_version 1.1;                    # 支持 http 1.1
gzip_types text/plain text/css
          application/json application/javascript
          text/xml application/xml
          image/svg+xml;                  # 重点压缩的文本类型
gzip_vary on;                             # 让代理/浏览器知道内容经压缩,开启缓存

gzip_types 是精华,列出你要压缩的 MIME 类型,静态网站很关键。如果没写 gzip_types,默认只压缩 text/html,CSS/JS 都不压,提速就打折扣。

检查语法并重载:

nginx -t                    # 无报错再继续
nginx -s reload             # 平滑重载,不中断服务(或 systemctl reload nginx)

四、实战:给核心类型都加上压缩

一个更完善的配置,把站点常用文本类型都覆盖:

http {
    gzip on;
    gzip_comp_level 5;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_types
        text/plain
        text/css
        application/json
        application/javascript
        text/xml
        application/xml
        application/xml+rss
        text/javascript
        image/svg+xml
        application/x-font-ttf
        font/opentype
        application/vnd.ms-fontobject
        application/x-font-woff;
    gzip_disable "msie6";   # 老 IE 不支持,禁用压缩
}

gzip_comp_level 建议 5-6:再高压缩率提升有限,CPU 却明显上升,低配 VPS 尤其别开 9。

五、怎么验证 gzip 是否生效

1. 用 curl 看响应头:

curl -H "Accept-Encoding: gzip" -IL http://你的域名/styles.css

看返回头里有没有这一行(有就是压缩成功):

content-encoding: gzip

2. 浏览器验证: F12 → Network → 点某资源 → 看 Headers 里 Content-Encoding: gzip。

3. 对比体积: 压缩前后 curl -s http://域名/xxx.js | wc -c,速度立判高下。

六、常见问题

Q1:开启后页面没变化 / 没压缩?

多半是 gzip_types 没加全,或改的是虚拟主机而没重载。确认你的 CSS/JS 类型列进 gzip_types,并 nginx -s reload。也可以用 Accept-Encoding 头验证。

Q2:CSS 压缩了,但 JS 没压缩?

JS 的 MIME 在有些环境是 application/javascript,有的是 text/javascript,把两种都写进 gzip_types 最稳。

Q3:低配 VPS 开了会更卡?

gzip_comp_level 不要开太高(>6)。压缩是 CPU 操作,但文本压缩对现代 CPU 压力很小,一般加速远大于开销。若担心,限制 gzip_min_length,让大文件走压缩、小文件跳过。

Q4:图片也要压缩吗?

不需要。gzip_types 里不要加 jpg/png 这类已压缩格式,加了反而白费 CPU。SVG 是文本,可压。

Q5:反向代理 / CDN 会不会影响?

开了 gzip_vary on 后,代理层能正确缓存预压缩版本。配合本站 Nginx 反向代理、缓存教程使用更佳。

Q6:浏览器不支持怎么办?

几乎所有现代浏览器和移动端都支持 gzip,gzip_disable "msie6" 已排除老 IE。

七、进阶:预压缩静态资源

对变化很少的静态文件,可预先用 gzip_static 直接提供 .gz 文件,省去每次实时压缩:

gzip_static on;   # 需在 http 或 server 块开启

然后预先生成 .gz:

gzip -k /www/wwwroot/site/static/app.css

访问 app.css 时,Nginx 直接返回预压缩的 app.css.gz,性能最佳(需模块支持,-V 里看有无 --with-http_gzip_static_module)。

总结

Nginx Gzip 是最便宜、最见效的提速手段:开启 gzip on → 配好 gzip_types(文本全上)→ 压缩级别 5-6 → nginx -t && reload,再用 curl 验证 Content-Encoding: gzip。通常转文本资源体积立减一半以上。配合本站的缓存、CDN、反向代理教程,网站速度还能再上一个台阶。


手机扫码阅读

微信或手机浏览器扫一扫,随时随地随心阅读与分享

Nginx location 匹配规则详解:=、^~、~、/ 的区别与优先级,配置不再踩坑

Linux tar 命令详解:tar.gz 打包压缩、解压解包、增量备份,一个命令全搞定

评 论
更换验证码