如何详细配置XAMPP使Apache多站点使用不同端口?
- 内容介绍
- 文章标签
- 相关推荐
本文共计942个文字,预计阅读时间需要4分钟。
直接说结论:
修改 httpd.conf 启用多端口监听
Apache 默认只监听 80,不加配置就无法响应 :8080 这类请求。这步是底层前提,不是可选项。
- 打开
XAMPP\apache\conf\httpd.conf - 找到
Listen 80这一行,在它下面新增你要的端口,比如:Listen 8080Listen 8081 - 检查
ServerName行是否匹配——如果只配了ServerName localhost:80,但又监听8080,Apache 启动会失败;建议统一改成ServerName localhost:80(保留默认),再额外加行:ServerName localhost:8080ServerName 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分钟。
直接说结论:
修改 httpd.conf 启用多端口监听
Apache 默认只监听 80,不加配置就无法响应 :8080 这类请求。这步是底层前提,不是可选项。
- 打开
XAMPP\apache\conf\httpd.conf - 找到
Listen 80这一行,在它下面新增你要的端口,比如:Listen 8080Listen 8081 - 检查
ServerName行是否匹配——如果只配了ServerName localhost:80,但又监听8080,Apache 启动会失败;建议统一改成ServerName localhost:80(保留默认),再额外加行:ServerName localhost:8080ServerName 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 都不会认。

