NameVirtualHost 在 Apache 2.4+ 中已被完全移除,配置多端口虚拟主机只需 Listen 指令和 <VirtualHost *:port> 块,无需 NameVirtualHost,否则会因指令不存在导致启动失败。

NameVirtualHost 在 XAMPP(Apache 2.4+)中已完全废弃,配置多端口时直接删掉它,否则会报错或导致虚拟主机失效。
为什么 NameVirtualHost 会导致 Apache 启动失败
从 Apache 2.3.11 开始,NameVirtualHost 指令被移除;XAMPP 自带的 Apache 版本普遍为 2.4.x(如 XAMPP 8.2+ 使用 Apache 2.4.54),此时再写 NameVirtualHost *:8080 会导致启动时抛出错误:Invalid command 'NameVirtualHost', perhaps misspelled or defined by a module not included in the server configuration。这不是模块没启用的问题,是该指令本身已被删除。
- Apache 官方文档明确说明:该指令“has been removed”
- 即使你手动加载了
mod_vhost_alias,也无济于事 - 旧教程里保留它,是因为混用了 Apache 2.2 的写法
正确配置多端口虚拟主机的写法(XAMPP Windows / macOS)
只需两步:声明监听端口 + 写 <VirtualHost> 块,不需要 NameVirtualHost,也不需要匹配 IP 地址前缀。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 在
httpd.conf或httpd-vhosts.conf中添加监听:Listen 8080 Listen 8081
- 每个端口对应一个
<VirtualHost *:8080>块,例如:<VirtualHost *:8080> DocumentRoot "D:/xampp/htdocs/site-a" ServerName site-a.local <Directory "D:/xampp/htdocs/site-a"> Require all granted </Directory> </VirtualHost> - 注意
ServerName不要带端口(如site-a.local:8080是错的),浏览器请求时才加端口,配置里只写域名 - 如果用
ServerAlias,同样不带端口;端口区分由<VirtualHost *:8080>标签本身完成
常见踩坑点:端口没生效、访问 403 或 404
不是配置写错了,而是权限或路径问题卡住了。
-
DocumentRoot路径含中文或空格?必须用双引号包裹,且确保路径真实存在 - Windows 下路径反斜杠
要么全换成正斜杠/,要么用双反斜杠\;推荐统一用/ - Apache 2.4 默认拒绝所有目录访问,
<Directory>块里必须有Require all granted(不是旧版的Allow from all) - 改完配置后必须运行
xampp-control.exe→ 点击 Apache “Stop” 再 “Start”,仅刷新页面无效 - 本地测试记得改
C:WindowsSystem32driversetchosts,加一行:127.0.0.1 site-a.local
多个端口共用同一域名?别这么干
比如让 example.com:8080 和 example.com:8081 都指向不同站点——技术上可行,但实际中极易混淆,且不符合常规部署逻辑。更合理的方式是:
- 用子域名区分:
api.example.com和admin.example.com,都走 80/443 - 用反向代理(
ProxyPass)把不同路径转给后端服务,而非暴露多个端口 - 真需要多端口,优先用于开发调试(如本地起 mock 服务、前端 dev server),上线环境应通过 Nginx/Apache 反代收敛到标准端口
端口多了,防火墙、路由器映射、HTTPS 证书管理都会变复杂,而 NameVirtualHost 这个词本身,早就不该出现在你的配置文件里了。

















