如何详细配置XAMPP使Apache多站点使用不同端口?

2026-04-27 20:341阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计942个文字,预计阅读时间需要4分钟。

如何详细配置XAMPP使Apache多站点使用不同端口?

直接说结论:

修改 httpd.conf 启用多端口监听

Apache 默认只监听 80,不加配置就无法响应 :8080 这类请求。这步是底层前提,不是可选项。

  • 打开 XAMPP\apache\conf\httpd.conf
  • 找到 Listen 80 这一行,在它下面新增你要的端口,比如:
    Listen 8080
    Listen 8081
  • 检查 ServerName 行是否匹配——如果只配了 ServerName localhost:80,但又监听 8080,Apache 启动会失败;建议统一改成 ServerName localhost:80(保留默认),再额外加行:
    ServerName localhost:8080
    ServerName localhost:8081
  • 确认 Include conf/extra/httpd-vhosts.conf 这行没被注释(即前面没有 #

httpd-vhosts.conf 中为每个端口定义 <VirtualHost>

每个端口对应一个独立的 <VirtualHost *:端口号> 块,不能复用同一个块、也不能把多个端口写进一个块里。

  • 打开 XAMPP\apache\conf\extra\httpd-vhosts.conf
  • 每个站点单独写一个块,例如:

    <VirtualHost *:8080> ServerName localhost:8080 DocumentRoot "C:/xampp/htdocs/project-a" <Directory "C:/xampp/htdocs/project-a"> Require all granted </Directory> </VirtualHost> <VirtualHost *:8081> ServerName localhost:8081 DocumentRoot "C:/xampp/htdocs/project-b" <Directory "C:/xampp/htdocs/project-b"> Require all granted </Directory> </VirtualHost>

  • DocumentRoot 必须是绝对路径,结尾不能带斜杠(C:/xampp/htdocs/project-a/ 是错的)
  • ServerName 必须和你浏览器里输入的地址一致(http://localhost:8080 就填 localhost:8080),否则 Apache 会 fallback 到第一个 <VirtualHost>

绕不开的权限与访问控制问题

即使配置全对,也常卡在 403 Forbidden。根本原因是 Apache 2.4+ 默认拒绝所有目录访问,必须显式放行。

  • 上面示例里的 <Directory> 块中,Require all granted 是关键,缺了就 403
  • 不要去动 httpd.conf 里全局的 Require all denied,那会影响整个服务;只在每个 <VirtualHost> 内部做最小化授权
  • 如果项目含 .htaccess,还需把 AllowOverride 设为 All
    AllowOverride All
  • Windows 下路径分隔符用正斜杠 /(不是反斜杠 \),否则 Apache 解析失败

验证语法 + 重启前必做这三件事

改完配置不验证就点 Start,Apache 极大概率启动失败,面板按钮瞬间变灰,错误日志里只显示 “Syntax error”,根本看不出哪行错。

  • 打开命令行,cd 到 XAMPP\apache\bin 目录,运行:
    httpd -t
    输出 Syntax OK 才算过关
  • 检查 Windows hosts 文件——虽然用 localhost:端口 不需要改 hosts,但一旦你用了自定义域名(如 admin.dev:8080),就必须在 C:\Windows\System32\drivers\etc\hosts 加:
    127.0.0.1 admin.dev
  • 浏览器缓存和 DNS 缓存干扰大,测试时优先用无痕窗口,或清空 DNS 缓存:
    ipconfig /flushdns

最容易被忽略的是:端口监听和虚拟主机端口必须严格一致,且 ServerName 必须和实际访问 URL 完全匹配(包括端口号)。少一个冒号、多一个空格,Apache 都不会认。

本文共计942个文字,预计阅读时间需要4分钟。

如何详细配置XAMPP使Apache多站点使用不同端口?

直接说结论:

修改 httpd.conf 启用多端口监听

Apache 默认只监听 80,不加配置就无法响应 :8080 这类请求。这步是底层前提,不是可选项。

  • 打开 XAMPP\apache\conf\httpd.conf
  • 找到 Listen 80 这一行,在它下面新增你要的端口,比如:
    Listen 8080
    Listen 8081
  • 检查 ServerName 行是否匹配——如果只配了 ServerName localhost:80,但又监听 8080,Apache 启动会失败;建议统一改成 ServerName localhost:80(保留默认),再额外加行:
    ServerName localhost:8080
    ServerName localhost:8081
  • 确认 Include conf/extra/httpd-vhosts.conf 这行没被注释(即前面没有 #

httpd-vhosts.conf 中为每个端口定义 <VirtualHost>

每个端口对应一个独立的 <VirtualHost *:端口号> 块,不能复用同一个块、也不能把多个端口写进一个块里。

  • 打开 XAMPP\apache\conf\extra\httpd-vhosts.conf
  • 每个站点单独写一个块,例如:

    <VirtualHost *:8080> ServerName localhost:8080 DocumentRoot "C:/xampp/htdocs/project-a" <Directory "C:/xampp/htdocs/project-a"> Require all granted </Directory> </VirtualHost> <VirtualHost *:8081> ServerName localhost:8081 DocumentRoot "C:/xampp/htdocs/project-b" <Directory "C:/xampp/htdocs/project-b"> Require all granted </Directory> </VirtualHost>

  • DocumentRoot 必须是绝对路径,结尾不能带斜杠(C:/xampp/htdocs/project-a/ 是错的)
  • ServerName 必须和你浏览器里输入的地址一致(http://localhost:8080 就填 localhost:8080),否则 Apache 会 fallback 到第一个 <VirtualHost>

绕不开的权限与访问控制问题

即使配置全对,也常卡在 403 Forbidden。根本原因是 Apache 2.4+ 默认拒绝所有目录访问,必须显式放行。

  • 上面示例里的 <Directory> 块中,Require all granted 是关键,缺了就 403
  • 不要去动 httpd.conf 里全局的 Require all denied,那会影响整个服务;只在每个 <VirtualHost> 内部做最小化授权
  • 如果项目含 .htaccess,还需把 AllowOverride 设为 All
    AllowOverride All
  • Windows 下路径分隔符用正斜杠 /(不是反斜杠 \),否则 Apache 解析失败

验证语法 + 重启前必做这三件事

改完配置不验证就点 Start,Apache 极大概率启动失败,面板按钮瞬间变灰,错误日志里只显示 “Syntax error”,根本看不出哪行错。

  • 打开命令行,cd 到 XAMPP\apache\bin 目录,运行:
    httpd -t
    输出 Syntax OK 才算过关
  • 检查 Windows hosts 文件——虽然用 localhost:端口 不需要改 hosts,但一旦你用了自定义域名(如 admin.dev:8080),就必须在 C:\Windows\System32\drivers\etc\hosts 加:
    127.0.0.1 admin.dev
  • 浏览器缓存和 DNS 缓存干扰大,测试时优先用无痕窗口,或清空 DNS 缓存:
    ipconfig /flushdns

最容易被忽略的是:端口监听和虚拟主机端口必须严格一致,且 ServerName 必须和实际访问 URL 完全匹配(包括端口号)。少一个冒号、多一个空格,Apache 都不会认。