基于名称的虚拟主机(name-based virtual host)是apache实现多域名部署的主要方式,即同一ip和端口下通过http请求头中的host字段区分域名,并映射到各自独立的documentroot;配置需启用模块与配置文件、定义含servername/documentroot/directory权限的virtualhost块、确保dns或hosts解析生效,并经configtest校验后重启服务。

多域名部署时,Apache 虚拟主机主要靠 基于名称的虚拟主机(Name-based Virtual Host) 实现,即同一 IP、同一端口(如 80 或 443)下,通过请求中的 Host 头区分不同域名,各自指向独立站点目录。配置核心是确保域名识别准确、目录权限到位、配置加载生效。
确认并启用虚拟主机支持
Apache 默认可能未启用虚拟主机模块或相关配置文件。需检查主配置文件(如 httpd.conf 或 /etc/apache2/apache2.conf),确保以下两处已启用:
- 加载必要模块:
LoadModule vhost_alias_module modules/mod_vhost_alias.so(部分版本需手动取消注释) - 引入虚拟主机配置:
Include conf/extra/httpd-vhosts.conf(Windows/WAMP)或IncludeOptional sites-enabled/*.conf(Linux Debian/Ubuntu)
为每个域名单独定义 VirtualHost 块
在虚拟主机配置文件中(如 httpd-vhosts.conf 或 /etc/apache2/sites-available/example.com.conf),为每个域名写一个独立的 <virtualhost></virtualhost> 块。关键字段必须明确:
-
ServerName:主域名(如
www.example.com),必须与用户实际访问的域名一致 -
ServerAlias:可选别名(如
example.com或*.example.com),用于覆盖常见访问变体 -
DocumentRoot:该域名对应的网站根目录(如
/var/www/example.com/public_html) -
:必须声明权限,Apache 2.4+ 推荐用 Require all granted,并设AllowOverride All(如需 .htaccess)
示例(两个域名共存于 80 端口):
<virtualhost>
ServerName www.site-a.com
ServerAlias site-a.com
DocumentRoot /var/www/site-a
<directory>
Require all granted
AllowOverride All
</directory></virtualhost><virtualhost>
ServerName www.site-b.com
ServerAlias site-b.com
DocumentRoot /var/www/site-b
<directory>
Require all granted
AllowOverride All
</directory></virtualhost>
本地测试需配 hosts 文件,线上需 DNS 解析
开发调试阶段,浏览器无法自动将自定义域名解析到本机,需手动修改系统 hosts 文件:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- Windows 路径:
C:\Windows\System32\drivers\etc\hosts - Linux/macOS 路径:
/etc/hosts - 添加行:
127.0.0.1 www.site-a.com www.site-b.com
上线前,务必让真实域名通过 DNS A 记录指向服务器公网 IP,否则 Apache 收不到对应 Host 头,会命中默认虚拟主机或返回 404。
验证配置并重启服务
配置完成后不能直接重启,应先做语法校验:
- Linux(Debian/Ubuntu):
sudo apache2ctl configtest - Linux(CentOS/RHEL):
sudo httpd -t - Windows(WAMP/XAMPP):可通过控制面板“Test Configuration”按钮
无报错后执行重启:
-
sudo systemctl restart apache2(Debian/Ubuntu) -
sudo systemctl restart httpd(CentOS/RHEL) - Windows:重启 Apache 服务或整个 WAMP/XAMPP 控制面板
访问各域名,确认返回对应站点内容即可。若失败,优先查错误日志(ErrorLog 指定路径)和 Apache 访问日志,比对 Host 请求头是否匹配。










