Apache基于端口的多站点共存本质是通过不同端口(如8080、8081)区分请求,无需域名解析或hosts映射;需在httpd.conf中显式添加Listen指令启用端口,配置对应<VirtualHost *:端口号>块,并确保目录权限与路径正确,最后重启服务即可通过http://localhost:端口号访问。

Apache 基于端口的多站点共存,本质是让不同网站监听不同的端口号(如 8080、8081、8000),同一 IP 下通过端口区分请求。它不依赖 Host 头,也不需要域名解析或 hosts 映射,适合本地开发、测试隔离或内部服务分发。
核心前提:明确监听端口并避免冲突
Apache 必须显式声明要监听的额外端口,且不能与已有服务(如 Nginx、其他 Apache 实例)或系统保留端口冲突。
- 打开 httpd.conf,确认已启用 Listen 指令,例如:
Listen 80
Listen 8080
Listen 8081
- 若只监听 80,后续所有
<VirtualHost *:8080>都不会生效; - Windows 上注意防火墙是否放行非标准端口;Linux/macOS 可能需 sudo 权限绑定 1024 以下端口(如 80/443),普通端口(如 8080)无此限制。
配置多个端口虚拟主机块
每个端口对应一个独立的 <VirtualHost> 块,必须指定端口号,不能混用通配符与具体端口。
示例(添加到 httpd-vhosts.conf 或主配置中):
<VirtualHost *:8080>
DocumentRoot "/var/www/site-a"
ServerName site-a.local
<Directory "/var/www/site-a">
Require all granted
AllowOverride All
</Directory>
</VirtualHost>
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<VirtualHost *:8081>
DocumentRoot "/var/www/site-b"
ServerName site-b.local
<Directory "/var/www/site-b">
Require all granted
AllowOverride All
</Directory>
</VirtualHost>
-
ServerName在端口模式下非必需,但建议填写,便于日志识别和调试; - 每个
<Directory>路径必须与对应DocumentRoot完全一致,否则 403 错误高发; - 无需
NameVirtualHost指令——该指令仅用于基于域名的虚拟主机(Apache 2.4+ 已自动启用)。
目录权限与路径验证
Apache 进程必须有读取权限,且路径真实存在。常见错误包括:
- 路径拼写错误(如
/var/www/site-a/末尾多斜杠,或大小写不一致); - Linux/macOS 下目录属主不是
www-data(Debian/Ubuntu)或apache(CentOS/RHEL),导致无权访问; - Windows 下路径使用反斜杠未转义(应写为
D:/www/site-a或"D:\www\site-a")。
建议操作顺序:建目录 → 放 index.html → 设权限 → 配 VirtualHost → 重启 Apache → 访问 http://localhost:8080 测试。
实际访问与注意事项
用户需在浏览器中显式输入端口号才能访问对应站点:
-
http://localhost:8080→ site-a -
http://localhost:8081→ site-b -
http://192.168.1.100:8080→ 同一局域网内其他设备也可访问
注意:
• 端口方案无法实现“隐藏端口”的友好 URL(不像域名可直接输 site-a.local);
• 不适用于生产环境对外提供 HTTPS 服务(标准 HTTPS 是 443,不能随意改);
• 若需 HTTPS,可为每个端口单独配 SSL,但更推荐结合反向代理(如 Nginx)统一处理 443 入口再转发。

















