Apache 通过 mod_deflate 模块实现 Gzip 压缩,需启用 mod_deflate 和 mod_headers 模块,按 MIME 类型配置 AddOutputFilterByType,排除二进制文件,关闭 PHP 的 zlib.output_compression,并验证响应头含 Content-Encoding: gzip。

Apache 本身不自带 Gzip 压缩功能,而是通过 mod_deflate 模块实现内容压缩。开启它不难,但关键在模块启用、类型匹配和避免冲突——尤其是 PHP 动态内容。
确认并启用 mod_deflate 和 mod_headers
这两个模块是基础:
-
mod_deflate负责实际压缩响应体 -
mod_headers用于设置Vary: Accept-Encoding等必要响应头
在 Ubuntu/Debian 上运行:
sudo a2enmod deflate headers && sudo systemctl restart apache2在 CentOS/RHEL 上检查 httpd.conf,确保以下两行未被注释:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
LoadModule headers_module modules/mod_headers.so
配置压缩规则(推荐放在虚拟主机或主配置中)
用 <IfModule mod_deflate.c> 包裹,避免模块未加载时报错:
- 用
AddOutputFilterByType DEFLATE按 MIME 类型压缩常见文本内容:HTML、CSS、JS、JSON、XML 等 - 对
.php文件强制启用压缩(因 PHP 输出的 Content-Type 可能动态变化):<FilesMatch "\.php$"> SetOutputFilter DEFLATE </FilesMatch> - 排除已压缩格式(如 JPG、PNG、PDF、ZIP),避免浪费 CPU:
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|pdf|zip|mp4|avi)$ no-gzip - 设压缩级别为 6(平衡速度与压缩率),过高(如 9)会增加 CPU 负担
关闭 PHP 自身的压缩机制
PHP 的 zlib.output_compression = On 与 mod_deflate 同时启用会导致双重压缩或 ERR_CONTENT_DECODING_FAILED 错误:
- 编辑
php.ini,确认:zlib.output_compression = Off - 禁用脚本内调用:
ini_set('zlib.output_compression', '0');(如有) - 移除
ob_gzhandler()—— 它在 PHP 8.0+ 已废弃,且与 Apache 压缩不兼容
验证是否生效
别只看网页变快了,要查响应头:
- 用 curl:
curl -I -H "Accept-Encoding: gzip" https://yoursite.com/test.php
成功时应返回Content-Encoding: gzip和Vary: Accept-Encoding - 浏览器开发者工具 → Network → 选一个请求 → Headers → Response Headers 查看
- 对比 “Size” 列中的 “transferred”(压缩后)与 “resource”(解压后)大小差异

















