在 httpd.conf 中开启 Gzip 压缩,核心是启用 mod_deflate 模块并配置正确的 MIME 类型,适合文本类资源传输场景。
先说结论:XAMPP 或原生 Apache 默认通常不启用 Gzip,需手动修改配置才能生效,否则所有提速尝试均无效。
- 适合:HTML、CSS、JS、JSON 等文本资源,图片视频无需压缩
- 先准备:确认 mod_deflate 模块已加载,检查 PHP 是否冲突
- 验收:浏览器 Network 面板看到 Content-Encoding: gzip 才算成功
命令速用版
若你确定环境标准,可直接在 httpd.conf 末尾追加以下配置块,但务必先确认模块已启用:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/css text/javascript application/javascript application/json application/xml
</IfModule>注意:不同 Apache 版本模块加载方式可能略有差异,请以官方文档为准。
原理简述
Gzip 压缩是服务器与浏览器之间的协商机制。浏览器请求时发送 Accept-Encoding: gzip 头,服务器若配置正确,会将文本内容压缩后传输,显著减少带宽占用。Apache 通过 mod_deflate 模块实现此功能,但出于兼容性考虑,许多集成环境(如 XAMPP)默认将其注释禁用。此外,若 PHP 层也开启了压缩,会与 Apache 层冲突导致失效。
分步处理
1. 定位配置文件:Windows 通常在 C:\xampp\apache\conf\httpd.conf,Linux 可能在 /etc/httpd/conf/httpd.conf 或 /etc/apache2/apache2.conf。
2. 启用模块:搜索 LoadModule deflate_module,删除行首的 # 号。若找不到,确认 modules 目录下是否存在 mod_deflate.so。
3. 添加规则:在文件末尾追加压缩配置,指定 MIME 类型而非文件扩展名,因为 Apache 匹配的是 Content-Type 头。
4. 检查 PHP 冲突:打开 php.ini,搜索 zlib.output_compression,确保其值为 Off,避免与 Apache 压缩冲突。
5. 重启服务:修改 httpd.conf 后必须完全重启 Apache。
- Windows (XAMPP): 控制面板先 Stop 再 Start,避免 Restart 不彻底。
- Linux (CentOS/RHEL):
sudo systemctl restart httpd - Linux (Ubuntu/Debian):
sudo systemctl restart apache2
怎么验证是否生效
打开浏览器开发者工具,进入 Network 面板,刷新页面,点击主文档请求,查看 Response Headers。若看到 Content-Encoding: gzip,说明配置成功。
也可使用命令行 curl 查看响应头信息,需指定 Accept-Encoding 头:
curl -H "Accept-Encoding: gzip" -I http://localhost
配置前响应头无 Content-Encoding 字段,配置后应显示 Content-Encoding: gzip。
常见坑
1. 模块未加载:只写了压缩规则却没取消 LoadModule 注释,模块未加载则规则不生效。
2. PHP 层干扰:php.ini 中 zlib.output_compression 设为 On 会接管输出,导致 Apache 压缩规则被绕过或报错。
3. 文件类型误配:不要对图片、视频等已压缩格式开启 Gzip,不仅无法减小体积,反而浪费 CPU。
4. 重启不彻底:XAMPP 控制面板中点击 Restart 有时不彻底,建议先 Stop 再 Start。
参考来源
- Apache Official Docs: https://httpd.apache.org/docs/current/mod/mod_deflate.html