xampp多端口需同步修改httpd.conf的listen指令与httpd-vhosts.conf中对应端口的virtualhost块,并在各块内显式配置header always set upgrade-insecure-requests "1",且确保mod_headers已启用。

XAMPP 默认只监听 80(HTTP)和 443(HTTPS)端口,要支持多端口访问(比如 8080、8000)并让浏览器自动升级不安全请求(即启用 Upgrade-Insecure-Requests 响应头),必须同时改 Apache 配置和虚拟主机定义——漏掉任一环节,Header 不生效或端口根本无法响应。
Listen 指令必须显式声明每个要监听的端口
Apache 不会自动“扩展”监听范围。只在 httpd.conf 里写 Listen 80,哪怕你后面配了 *:8080 的 VirtualHost,请求也会被直接拒绝。
- 打开
XAMPP\apache\conf\httpd.conf - 找到已有
Listen 80行,在下方新增你需要的端口,例如:Listen 80 Listen 8080 Listen 8000
- 确保没有重复
Listen行,否则 Apache 启动失败 - 如果改过默认端口(比如把 80 改成 8081),这里也必须同步更新,否则
ServerName localhost:8081会因无监听而报错
每个 VirtualHost 必须绑定具体端口且独立配置 Header
Upgrade-Insecure-Requests 是 HTTP 响应头,不能全局开启,必须在对应 VirtualHost 块内用 Header 指令设置,且该模块(mod_headers)必须已启用。
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中这行未被注释:LoadModule headers_module modules/mod_headers.so
- 在
httpd-vhosts.conf中,为每个端口定义完整VirtualHost,例如:<virtualhost> ServerName project-a.local DocumentRoot "C:/xampp/htdocs/project-a" <directory> Require all granted </directory> Header always set Upgrade-Insecure-Requests "1" </virtualhost> - 不要在
*:80块里写Header然后指望它覆盖*:8080—— Apache 不继承 - 如果项目需要 HTTPS 升级,仅设 Header 不够,还必须配 SSL 虚拟主机并启用 HSTS
hosts 文件与浏览器行为要匹配端口实际使用方式
浏览器对 Upgrade-Insecure-Requests 的触发有严格前提:当前页面是 HTTPS 或明确指定了端口的 HTTP URL。直接访问 http://project-a.local(无端口)时,浏览器仍按默认 80 端口发请求,不会自动跳转到你配的 8080。
- 在
C:\Windows\System32\drivers\etc\hosts中仍写:127.0.0.1 project-a.local
- 但访问时必须显式带端口:
http://project-a.local:8080,否则 Header 生效但无意义(请求根本没走到那个VirtualHost) - Chrome/Firefox 对无端口的 HTTP 域名不会主动加
Upgrade-Insecure-Requests;只有从 HTTPS 页面发起的子资源请求,或用户手动输入带端口的 HTTP URL 才可能触发 - 测试时别依赖书签或历史记录——清空缓存或用无痕窗口,避免旧重定向干扰
最易忽略的是 mod_headers 模块未启用,以及 VirtualHost 块里漏写 Header 指令。很多人只改了 Listen 和 ServerName,以为端口通了 Header 就自动跟上,结果抓包一看响应里根本没有那行头——Apache 不会猜你要什么头,它只执行你白纸黑字写的每一条指令。










