WordPress 开启 Gzip:先测再开,3 种环境配置一次讲清

本站部分链接为联盟推广链接。通过这些链接购买,我可能获得佣金...

这不仅不会增加您的实际费用,通常还能让您享受到专属折扣。所有上榜推荐均基于真实项目环境下的自费实测,排名完全由客观测评数据决定。详细规则请查阅《免责声明》。

跑 PageSpeed 测速,报告里常常冒出一条「启用文本压缩」。很多人一搜,找到一篇 Gzip 教程,就开始往 functions.php、.htaccess、php.ini 里挨个贴代码。

我想先泼一盆冷水:你的网站很可能早就开着压缩了。 用了 Cloudflare 的站,Cloudflare 会自动帮你压缩。用宝塔装的 Nginx,主配置里一般也写好了。这种时候再往 WordPress 里贴压缩代码,不仅没用,还可能出问题。

所以这篇的顺序是反过来的:先花 1 分钟测一下,确认真没开,再按你的服务器环境去开。

Gzip 到底压缩了什么?

浏览器打开一个网页,要下载 HTML、CSS、JavaScript 这些文件。它们都是纯文本,重复的字符很多,压缩起来效果特别好。

开了 Gzip 以后,服务器先把文件压小再发出去,浏览器收到后自己解压。访客那边什么都不用做,只是下载的数据量变少了。

现在除了 Gzip,还有两种更新的压缩格式:Brotli(br) 和 Zstandard(zstd)。Chrome 官方的 Lighthouse 文档推荐优先用 Brotli,Gzip 作为兼容性兜底。

但有一点要分清:JPG、PNG、WebP 这些图片本身就是压缩过的格式,再用 Gzip 压一遍几乎小不了多少,只会白白消耗服务器 CPU。Apache 官方文档里给的 mod_deflate 配置示例,就专门把 gif、jpg、png 排除在外。图片要变小,靠的是图片压缩和转格式,不是 Gzip。

第一步:1 分钟检测你的网站开没开

下面三种方法任选一种就行。

方法一:浏览器开发者工具(最直观)

  1. 用 Chrome 打开你的网站,按 F12 打开开发者工具。
  2. 切到 Network(网络)面板,按 F5 刷新页面。
  3. 点列表最上面那条请求,也就是网页本身。
  4. 在 Headers 里找 Response Headers(响应头),看有没有 content-encoding 这一行。

值是 gzip、br 或 zstd,说明已经在压缩了。这一行根本不存在,就说明没压缩。

chrome devtools content encoding header

Chrome 官方文档还提到一个小技巧:在 Network 面板开启「大号请求行」后,Size 列会显示两个数字,上面是实际传输的压缩后大小,下面是解压后的原始大小。两个数字差得越多,说明压缩效果越好。

方法二:curl 命令(适合有服务器的朋友)

在电脑或服务器终端里执行下面的命令,https://你的域名/ 换成你自己的网址:

bash

有输出,比如 content-encoding: gzip,就说明开了。没有任何输出,就是没开。

想单独测某个 CSS 或 JS 文件,把网址换成那个文件的地址就行。

wordpress gzip compression 1

方法三:PageSpeed Insights

在 PageSpeed 报告里,没有「启用文本压缩」这一条,基本说明没问题。

要了解它的判断规则。Chrome 官方文档说明,Lighthouse 会检查所有文本类资源,content-encoding 不是 br、gzip 或 deflate 的,就会拿出来估算能省多少。不过小于 1.4 KiB 的文件,或者预计节省不到 10% 的,不会被标出来。

另外,从 Lighthouse 13 开始,这一项被并进了「文档请求延迟」那一类洞察里,新版报告里可能看不到单独的标题。

还有一种常见情况:报告里列出的文件不是你自己域名下的,而是第三方的统计代码、字体或者广告脚本。WP Rocket 官方文档也专门提醒过,外部资源的压缩不归你的服务器管,你这边怎么设置都没用。

用了 Cloudflare?大概率不用再管了

网站套了 Cloudflare 的话,访客收到的内容是 Cloudflare 压缩后发出去的。Cloudflare 官方文档(2026 年 4 月更新)写明了各套餐默认使用的压缩格式:

Cloudflare 套餐默认压缩格式
Free(免费版)Zstandard
Pro、BusinessBrotli
EnterpriseGzip

实际用哪种,还要看访客浏览器支持什么,不支持新格式的会自动退回其他格式。

源站那边,官方文档说明:Cloudflare 回源时会带上 accept-encoding: br, gzip,源站可以返回压缩的内容,也可以返回不压缩的,都不影响访客最终拿到压缩后的版本。

默认压缩的内容类型也很全,HTML、CSS、JavaScript、JSON、XML、SVG、字体等都在里面。

所以套了 Cloudflare 的站,按方法一测出来大概率是 zstd 或 br,这一步就可以直接跳过了。

宝塔 / aaPanel(Nginx):先看配置,再改

宝塔装的 Nginx,主配置文件一般已经写好了 Gzip。参考文章的作者就提到宝塔默认开启了 Gzip,宝塔论坛上也有用户贴出过原始的 nginx.conf,里面写的是 gzip on;,压缩级别是 2。不过不同时期安装的版本可能有差别,以你服务器上的实际配置为准。

宝塔官方命令大全里给出的 Nginx 路径是:

  • 主配置文件:/www/server/nginx/conf/nginx.conf
  • 各站点的配置文件目录:/www/server/panel/vhost/nginx

aaPanel 是宝塔的国际版,沿用同样的 /www/server 目录结构。

宝塔面板/aapanel 面板 软件商店 – 已安装 – nignx – 设置:

bt nginx conf gzip grep

确实没开的话,在 nginx.conf 的 http { } 段里加上下面这段。如果已经有 gzip on;,只是想调参数,就直接改原来那几行,不要重复添加。同一个指令在同一段里写两遍,Nginx 会报错,起不来。

nginx

改完后,再执行重载。平时就在服务器上改 Nginx 配置的话,可以顺手看看这篇 Nginx 拦截恶意扫描规则,一次把安全规则也加上。

老教程里这 4 处,现在别照抄

我对照 Nginx 官方文档,把参考文章里那段配置逐行核了一遍,下面几处建议改掉:

一、压缩级别范围是 1 到 9,不是 1 到 10。 官方文档写得很明确:取值范围 1 到 9,默认是 1。级别越高 CPU 消耗越大,压缩率提升却越来越少。我一般用 5,参考文章作者在评论区建议的是 5 或 6,都在合理范围内。

二、gzip_types 里不用写 text/html。 官方原话是:text/html 类型的响应总是会被压缩。写上不会出错,只是多余。

三、图片类型别加进去。 前面说过,JPG、PNG 本来就是压缩格式,再压只是浪费 CPU。SVG 是文本格式,值得压,所以上面的配置里加了 image/svg+xml。

四、gzip_disable "MSIE [1-6]\." 可以删了。 这一行是给 IE6 及更老的浏览器准备的,现在基本不会再遇到这种访客了。

Apache / LiteSpeed 虚拟主机:用 .htaccess

用 cPanel 这类虚拟主机的话,服务器多半是 Apache 或 LiteSpeed,改不了主配置。这时候可以在网站根目录的 .htaccess 文件末尾,加上 Apache 官方文档示例里的那一行:

apache

外面那层 <IfModule> 的作用是:服务器没装 mod_deflate 模块时,这段会被自动跳过,不会把网站搞成 500 错误。

装了 WP Rocket 的话,这一步可以省了。 WP Rocket 官方文档说明,它会在 Apache 和 LiteSpeed 服务器上自动往 .htaccess 写入 Gzip 规则,前提是服务器启用了 mod_deflate 模块。同一份文档也说明,Nginx 不读 .htaccess,所以 Nginx 用户必须在服务器配置里自己开,就是上一节的方法。

PHP 层压缩:服务器层实在开不了才用

参考文章里还给了 php.ini、functions.php、index.php 好几种 PHP 层写法。我的建议是:服务器层能开,就别动 PHP 层。

原因在 PHP 官方手册里写得很清楚:

  • ob_gzhandler() 和 zlib.output_compression 不能同时使用。
  • 两者之间,官方认为 zlib.output_compression 更好。

所以参考文章里往 functions.php 塞 ob_gzhandler 的写法,如果你的 php.ini 里正好开了 zlib.output_compression,两者就撞上了。

另外,PHP 层只能压缩 PHP 输出的 HTML,管不到 CSS、JS 这些静态文件。

实在只能动 PHP 的话,用官方推荐的方式,在 php.ini 里改:

ini

zlib.output_compression_level 的取值是 0 到 9。默认值是 -1,意思是交给服务器决定。

WP Rocket 的文档也给了同样的建议:如果检测发现只有 HTML 没被压缩,就在 php.ini 或 user.ini 里加上 zlib.output_compression = On。

不同环境怎么选?一张表对照

你的情况怎么做
网站套了 Cloudflare先检测,大概率已经是 zstd 或 br,不用管
宝塔 / aaPanel 装的 Nginx用 grep 查看 nginx.conf,没开再加,改完 nginx -t 测试后重载
Apache / LiteSpeed 虚拟主机装了 WP Rocket 会自动写入,没装就在 .htaccess 里加 mod_deflate
服务器层确实开不了php.ini 里开 zlib.output_compression,不要再加 ob_gzhandler
报告里提示的是第三方文件你这边改不了,考虑换掉或延迟加载这个第三方脚本

压缩只开一层就够了。 Nginx 官方文档提到,已经被上游压缩过的响应,它不会再压一次,所以多层叠加并不会让文件更小,只会让问题更难排查。哪层出问题都不知道去哪改。

还没装面板的话,可以先看 宝塔面板安装教程;用海外服务器、不想绑国内手机号的,可以看 aaPanel 安装 WordPress 教程。两者的 Gzip 配置方法完全一样。还在挑服务器的话,可以参考 VPS 推荐汇总。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注


快捷菜单
WordPress 主机
VPS 主机
最新优惠
正版授权
VPS 补货监控