必须先启用mod_deflate、mod_filter和mod_headers三个模块,再配置多端口和虚拟主机,否则压缩规则会静默失效或报500;压缩配置须置于httpd.conf主配置末尾,不可放在虚拟主机内,且需配合setenvifnocase排除已压缩资源。

能同时配多端口和Deflate压缩,但顺序和模块依赖不能错——先确保 mod_deflate 和 mod_headers 加载成功,再配端口和虚拟主机,否则压缩规则可能被忽略或报 500。
必须启用的三个 Apache 模块
Deflate 压缩依赖不止 mod_deflate,mod_filter 和 mod_headers 缺一不可。XAMPP 默认注释了它们,光开 deflate_module 会导致配置语法错误或静默失效。
- 打开
C:\xampp\apache\conf\httpd.conf(macOS/Linux 对应路径为/Applications/XAMPP/xamppfiles/etc/httpd.conf) - 搜索并取消以下三行的注释(删掉开头的
#):LoadModule deflate_module modules/mod_deflate.soLoadModule filter_module modules/mod_filter.soLoadModule headers_module modules/mod_headers.so - 保存后重启 Apache;可访问
http://localhost/server-info(需先启用mod_info)确认三者都在 “Loaded Modules” 列表中
多端口配置要避开 Listen 冲突
多个 Listen 指令本身没问题,但若已有其他服务占用了目标端口(如 Skype、IIS、另一实例的 XAMPP),Apache 启动会失败,日志里报 Address already in use: make_sock: could not bind to address。
XAMPP 8.0.30 是一款免费、开源的跨平台 Web 服务器集成包,专为快速搭建本地 PHP 开发环境而设计。该版本核心组件包括:Apache 2.4.56、MySQL 8.0.33、PHP 8.0.30、phpMyAdmin 5.2.1 等。它支持 Windows、Linux 和 macOS 系统,可让开发者在个人电脑上轻松模拟服务器环境,无需复杂配置即可运行 WordPress、Thin
- 在
httpd.conf中Listen 80下方追加端口,例如:Listen 8080Listen 8081 - 检查 Windows 是否有程序抢占端口:命令行运行
netstat -ano | findstr :8080,记下 PID,再用任务管理器查进程 - 不要在
httpd-vhosts.conf里写*:8080却没在httpd.conf里Listen对应端口——虚拟主机不会监听未声明的端口
压缩规则必须放在主配置,且按端口分组生效
把 <ifmodule mod_deflate.c></ifmodule> 块写在 httpd.conf 末尾是安全的;若塞进 httpd-vhosts.conf 的某个 <virtualhost></virtualhost> 里,Apache 会报 Invalid command 'AddOutputFilterByType', perhaps misspelled or defined by a module not included in the server configuration——因为模块作用域未覆盖到虚拟主机上下文。
- 推荐写法(放在
httpd.conf文件最底部):<ifmodule mod_deflate.c><br> SetOutputFilter DEFLATE<br> AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json application/x-httpd-php<br><ifmodule mod_setenvif.c><br> SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|pdf|doc|exe|zip|rar)$ no-gzip dont-vary<br></ifmodule><br></ifmodule>
-
AddOutputFilterByType中的 MIME 类型必须与响应头Content-Type完全匹配,比如 PHP 输出 JSON 时若没显式设header('Content-Type: application/json');,就不会被压缩 - 验证是否生效:用 Chrome DevTools → Network → 点开任意 HTML/JS/CSS 请求 → 查看 Response Headers 中是否有
content-encoding: gzip
常见组合问题:403 + 无压缩 + localhost 失效
启用多端口后,常出现 localhost 访问 403 或压缩失效,本质是虚拟主机接管了全部请求,但默认站点没被显式定义,或目录权限没同步放开。
- 确保
httpd.conf中已开启:Include conf/extra/httpd-vhosts.conf(去掉#) - 在
httpd-vhosts.conf最上方补一个*:80的兜底虚拟主机:<virtualhost><br> DocumentRoot "C:/xampp/htdocs"<br> ServerName localhost<br><directory><br> Require all granted<br> AllowOverride All<br></directory><br></virtualhost>
- 每个端口的
<directory></directory>块里都必须有Require all granted(旧版用Allow from all),否则即使压缩规则对,也会因 403 而无法返回内容
真正麻烦的不是写几行配置,而是 Apache 的模块加载顺序、虚拟主机作用域、目录权限三者咬合出错时,错误日志往往只报“AH00526”,不提具体哪条指令挂了——建议每次改完只动一处,用 httpd -t 验证语法,再重启。










