Apache通过HTTP请求的Host头字段识别目标站点,匹配<VirtualHost *:80>块中的ServerName或ServerAlias,首个匹配项生效;无匹配时交由首个VirtualHost处理,默认站点即此;2.4+无需NameVirtualHost,但需正确配置ServerName、DocumentRoot及<Directory>中Require all granted。

Apache 用同一个 IP 托管多个域名,靠的是 HTTP 请求里的 Host 头字段,不是靠 IP 或端口本身。
Host 头是识别目标站点的唯一依据
用户访问 www.site1.com 时,浏览器发出的请求里一定包含这一行:Host: www.site1.com
Apache 收到请求后,忽略目标 IP(因为所有域名都解析到同一个服务器 IP),只提取 Host 值,然后按顺序比对所有 <VirtualHost *:80> 块里的 ServerName 和 ServerAlias。
匹配过程是严格且有顺序的
- Apache 从配置文件顶部开始,逐个检查每个
<VirtualHost>块 - 第一个
ServerName或ServerAlias匹配成功的块就被选中 - 如果 Host 值完全不匹配任何一项(比如直接输 IP 访问、输错域名、或 Host 头为空),就交给第一个定义的
<VirtualHost>处理——它就是默认站点
必须确保基础配置正确才能生效
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- Apache 2.4+ 不需要
NameVirtualHost指令,只要存在两个及以上<VirtualHost *:80>块,就自动启用基于名称的虚拟主机 - 每个
<VirtualHost>必须明确指定ServerName(推荐也加ServerAlias覆盖 www/裸域等) -
DocumentRoot要指向对应站点的根目录,比如/var/www/site1.com/public -
<Directory>块内必须写Require all granted,否则即使匹配成功也会返回 403
常见错误点
- 把多个
DocumentRoot写在同一个<VirtualHost>里(不支持) - 忘记配
<Directory>权限,导致 403 -
ServerName拼写错误或缺少www.导致无法匹配 - 配置文件加载顺序混乱,让本该是备用的站点成了默认站
不复杂但容易忽略

















