apache可通过添加多个listen指令并配置对应virtualhost实现多端口监听,如listen 8080和listen 8081,并在virtualhost中绑定不同documentroot与servername,再配合hosts文件映射域名到127.0.0.1,即可通过http://dev1.test:8080等访问独立站点。

Apache怎么监听多个端口
XAMPP默认只监听 80 端口,要跑多个本地站点(比如 dev1.test 和 dev2.test),最直接的方式是让 Apache 同时监听多个端口,例如 8080、8081。这比改 DNS 或用子域名泛解析更可控。
操作路径:C:\xampp\apache\conf\httpd.conf(Windows)或 /Applications/XAMPP/etc/httpd.conf(macOS)。
找到 Listen 80 这一行,在它下面新增:
Listen 8080 Listen 8081
注意:不能只写端口号,必须是完整 Listen 指令;如果已有其他 Listen 行(如 Listen 443),保持格式一致即可。
重启 Apache 后,http://localhost:8080 和 http://localhost:8081 就能分别访问不同服务了。
如何为每个端口配独立虚拟主机
光开多个端口没用——所有请求默认都进同一个 DocumentRoot。得靠 <virtualhost></virtualhost> 把端口和目录/域名绑定起来。
在 httpd.conf 文件末尾或 httpd-vhosts.conf(推荐)里添加:
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
<virtualhost>
DocumentRoot "C:/xampp/htdocs/dev1"
ServerName dev1.test
</virtualhost><virtualhost>
DocumentRoot "C:/xampp/htdocs/dev2"
ServerName dev2.test
</virtualhost>
关键点:
-
ServerName必须和hosts里写的域名完全一致(大小写不敏感,但建议全小写) -
DocumentRoot路径里的反斜杠在 Windows 上要用正斜杠或双反斜杠,否则 Apache 启动失败 - 确保
httpd-vhosts.conf已被主配置文件包含(检查httpd.conf中是否有Include conf/extra/httpd-vhosts.conf且未被注释)
hosts 文件怎么写才生效
Windows 路径:C:\Windows\System32\drivers\etc\hosts;macOS/Linux:/etc/hosts。必须用管理员权限(Windows)或 sudo(macOS)编辑。
每行一个映射,格式固定:IP地址 域名,中间用空格或制表符分隔。本地开发只用 127.0.0.1:
127.0.0.1 dev1.test 127.0.0.1 dev2.test
常见失效原因:
- 文件保存时被记事本加了
.txt后缀(如hosts.txt),必须确认扩展名是纯hosts - 浏览器缓存了旧 DNS 结果,可尝试
chrome://net-internals/#dns清除 DNS 缓存,或换 Firefox 测试 - 系统防火墙或安全软件拦截了非标端口(如
8081),临时关闭测试一次
为什么访问 dev1.test 总跳回 localhost
这是最常卡住人的地方:浏览器发请求时,默认走 80 端口,而你把 dev1.test 绑到了 8080。所以必须显式带端口访问:http://dev1.test:8080。
想省略端口,只有两个办法:
- 把虚拟主机绑定到
80端口,再用不同ServerName区分(这时hosts映射仍有效,但需确保每个ServerName唯一) - 用反向代理(如 Nginx)监听
80,按 Host 头转发到后端不同端口——对 XAMPP 来说属于过度设计
别试图用 Redirect 或 mod_rewrite 隐藏端口,HTTP 协议本身不允许浏览器自动补端口,前端永远得知道目标端口。










