Apache支持通过不同端口区分多个虚拟主机,关键在于显式声明监听端口、为每个端口定义独立的块,并确保目录权限与服务启用同步到位;需编辑主配置文件添加Listen指令,为各端口配置专属VirtualHost块,设置DocumentRoot与Directory权限,经a2ensite或直接reload生效,并配合DNS或hosts解析及带端口访问验证。

Apache 支持通过不同端口区分多个虚拟主机,关键在于显式声明监听端口、为每个端口定义独立的 <virtualhost></virtualhost> 块,并确保目录权限与服务启用同步到位。
声明并开放目标端口
Apache 默认只监听 80 和 443,用其他端口(如 8080、8000)必须手动添加:
- 编辑主配置文件:
/etc/apache2/apache2.conf(Debian/Ubuntu)或/etc/httpd/conf/httpd.conf(RHEL/CentOS) - 在文件中添加对应行:
Listen 8080、Listen 8000(每端口一行) - 检查防火墙放行:Ubuntu 执行
sudo ufw allow 8080;CentOS 执行sudo firewall-cmd --add-port=8000/tcp --permanent && sudo firewall-cmd --reload
为每个端口写独立的 VirtualHost 块
每个端口只能有一个 <virtualhost></virtualhost> 块处理该端口全部请求,不能在一个块里混配多个域名——那是基于名称的虚拟主机,不依赖端口区分。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 站点 A(
site1.example.com)走 8080:<VirtualHost *:8080><br> ServerName site1.example.com<br> DocumentRoot /var/www/site1<br> <Directory /var/www/site1><br> Require all granted<br> </Directory><br></VirtualHost>
- 站点 B(
api.example.com)走 8000:<VirtualHost *:8000><br> ServerName api.example.com<br> DocumentRoot /var/www/api<br> <Directory /var/www/api><br> Require all granted<br> </Directory><br></VirtualHost>
- 可选添加
ServerAlias(如www.site1.example.com),便于兼容访问
启用配置并确认权限
配置文件保存后不会自动生效,需主动启用并验证运行环境:
- Debian/Ubuntu:把配置文件放入
/etc/apache2/sites-available/,执行sudo a2ensite site1.conf,再sudo systemctl reload apache2 - RHEL/CentOS:将配置存为
/etc/httpd/conf.d/site1.conf,直接sudo systemctl reload httpd - 确保 Apache 进程用户(如
www-data或apache)对DocumentRoot目录有读取权限:sudo chown -R www-data:www-data /var/www/site1
域名解析与访问验证
服务端配置完成只是第一步,客户端也需正确解析和调用:
- DNS 层面:确保
site1.example.com和api.example.com都已解析到服务器公网 IP - 浏览器访问时必须带端口号:
http://site1.example.com:8080、http://api.example.com:8000 - 本地调试可用 hosts 文件临时映射:
127.0.0.1 site1.example.com和127.0.0.1 api.example.com

















