apache基于端口的虚拟主机核心是监听多个端口(如8888、9999)并为各端口绑定独立站点目录,无需域名解析,适用于内网调试与后台隔离;需在httpd.conf中添加listen指令、在httpd-vhosts.conf中配置对应区块,并显式设置权限。
在 apache 中实现基于端口的虚拟主机,核心是让服务器监听多个非标准 http 端口(如 8080、8888、9999),并为每个端口绑定独立的站点目录和配置。它不依赖域名解析,适合内网调试、后台系统隔离或测试环境。
一、启用监听端口
Apache 默认只监听 80 端口。要支持多端口,必须在主配置文件中显式声明:
- 编辑 httpd.conf(Linux 路径通常为
/etc/httpd/conf/httpd.conf或/etc/apache2/apache2.conf;Windows 下多在conf/httpd.conf) - 找到
Listen指令段,添加需要的端口号,例如:
Listen 8888
Listen 9999
注意:不能重复监听同一端口;若使用非特权端口(1024 以上),无需 root 权限即可启动。
二、配置虚拟主机区块
在 httpd-vhosts.conf(或直接写入主配置文件)中,为每个端口定义一个 <virtualhost></virtualhost> 块,格式为 <virtualhost></virtualhost>:
-
ServerName可填 IP 或任意标识名(如192.168.1.10或admin.local),实际访问时用http://IP:端口,域名无实际作用 -
DocumentRoot必须指向不同目录,避免内容混用 - Apache 2.4+ 必须显式配置
<directory></directory>权限,否则返回 403 错误
示例(两个端口):
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
DocumentRoot "/var/www/bbs"
ServerName 192.168.1.10
Require all granted
DocumentRoot "/var/www/blog"
ServerName 192.168.1.10
Require all granted
三、确保配置加载与权限正确
常见遗漏点会导致配置不生效:
- 确认主配置中已启用虚拟主机模块:
LoadModule vhost_alias_module modules/mod_vhost_alias.so(Apache 2.2 需手动开启;2.4 默认启用) - 确认已引入虚拟主机配置文件:
Include conf/extra/httpd-vhosts.conf(取消该行前的#) - 检查目录权限:目标 DocumentRoot 目录需被 Apache 进程读取(如 Linux 下属组为
www-data或apache) - 防火墙放行对应端口(如 CentOS 的
firewalld或 Ubuntu 的ufw)
四、验证与访问
完成配置后执行:
-
apachectl configtest或apache2ctl configtest检查语法 - 重启服务:
systemctl restart httpd(CentOS)或systemctl restart apache2(Ubuntu) - 浏览器访问:
http://127.0.0.1:8888和http://127.0.0.1:9999,应分别显示不同站点内容
这种方案简单直接,不涉及 DNS 或 hosts 修改,特别适合开发机、内网管理后台或多项目并行调试场景。










