Apache 开启 Gzip 压缩主要通过启用 mod_deflate 模块并配置 MIME 类型实现,适用于文本类资源(HTML/CSS/JS),需避免与 PHP 自带压缩冲突。
先说结论:Apache 本身不自带 Gzip 功能,需加载 mod_deflate 模块并按 MIME 类型配置压缩规则,同时关闭 PHP 的 zlib.output_compression 防止双重压缩。
- 适合:静态文本传输优化,如 HTML、CSS、JavaScript 文件
- 先准备:确认 mod_deflate 和 mod_headers 模块已加载
- 验收:检查响应头是否包含 Content-Encoding: gzip
命令速用版
在 Debian/Ubuntu 系统上,可使用以下命令快速启用模块并重启服务:
sudo a2enmod deflate headers sudo systemctl restart apache2
在 CentOS/RHEL 系统上,需编辑 httpd.conf 确保模块未被注释,然后重启:
sudo systemctl restart httpd
为什么会这样
开启 Gzip 压缩能减少传输数据的大小,从而提高网站的加载速度。Apache 通过 mod_deflate 模块对响应体进行压缩,浏览器接收后解压,从而节省带宽并加快页面渲染。
分步处理
1. 确认并启用模块:检查 httpd.conf 或 apache2.conf,确保 LoadModule deflate_module modules/mod_deflate.so 未被注释。在 Ubuntu 上可运行 sudo a2enmod deflate。
2. 配置压缩规则:在配置文件中添加 IfModule mod_deflate.c 块,使用 AddOutputFilterByType DEFLATE 指定压缩 text/html、text/css、application/javascript 等类型。
3. 排除二进制文件:设置 SetEnvIfNoCase Request_URI 排除 gif、jpg、png、pdf、zip 等已压缩格式,避免浪费 CPU。
4. 关闭 PHP 自身压缩:编辑 php.ini,确认 zlib.output_compression = Off,避免与 Apache 压缩冲突导致 ERR_CONTENT_DECODING_FAILED 错误。
5. 重启 Apache 服务器:保存配置后运行 sudo systemctl restart apache2 或 sudo service apache2 restart 使更改生效。
怎么验证是否生效
使用 curl 命令检查响应头:curl -I -H "Accept-Encoding: gzip" https://yoursite.com/test.php。成功时应返回 Content-Encoding: gzip 和 Vary: Accept-Encoding。
也可通过浏览器开发者工具查看:Network 面板选中请求,检查 Response Headers 中是否有 Content-Encoding: gzip,并对比 Size 列中的 transferred 与 resource 大小。
常见坑
1. 双重压缩:PHP 的 zlib.output_compression 与 mod_deflate 同时启用会导致错误,必须关闭 PHP 侧压缩。
2. 模块未加载:修改 httpd.conf 后未重启 Apache,或模块路径错误,导致配置无效。
3. 类型不匹配:配置的 MIME 类型与实际响应头不一致,例如 PHP 动态输出 application/json 但未在压缩列表中。
4. 缓存干扰:浏览器缓存了未压缩版本,验证时需强制刷新或清空缓存。
常见问题
PHP 输出为什么没有 Gzip 头?
通常是因为 PHP 开启了 zlib.output_compression 与 Apache 冲突。需在 php.ini 中关闭该选项,并确保 mod_deflate 已加载。
图片文件需要开启 Gzip 压缩吗?
不需要。JPG、PNG、PDF 等格式本身已压缩,再次 Gzip 压缩会浪费 CPU 且几乎不减小体积,应在配置中排除。
配置后页面出现 ERR_CONTENT_DECODING_FAILED 怎么办?
这是双重压缩导致的。检查是否同时启用了 Apache mod_deflate 和 PHP ob_gzhandler 或 zlib 压缩,禁用其中一方即可。
参考来源
- 怎么为 Apache 开启 Gzip 压缩
- 如何在 XAMPP 中配置 Apache 的 Gzip 压缩提升页面加载速度
- 如何在 Apache 中开启 Gzip 压缩
- Apache 配置中如何开启 Gzip 压缩
- Apache 如何配置 Gzip 压缩
- Apache 配置中如何启用 gzip 压缩
- Apache 如何配置 PHP 的 Gzip 压缩_启用 PHP 输出压缩的设置【方法】
- Apache 开启 gzip 压缩与配置 Expire/Cache-Control 头
- Apache 如何开启 Gzip 压缩