同IP端口下存在多个VHost时,Apache选择服务虚拟主机的规则是什么?
Apache 同IP/端口下多虚拟主机匹配规则
核心匹配逻辑
Apache 对同IP+端口下的多个虚拟主机,遵循以下优先级规则匹配处理请求:
- 首先提取请求头中的
Host字段值,与所有监听当前IP+端口的虚拟主机的ServerName、ServerAlias配置做精确匹配,匹配到对应虚拟主机后直接返回该站点内容 - 若未匹配到任何符合条件的虚拟主机,会自动返回当前IP+端口组合下第一个被Apache加载的虚拟主机的内容,你提到的「先配置先响应」规则完全成立,这个默认 fallback 的主机也被称为默认虚拟主机。
直接访问IP返回某一站点的原因
你直接通过IP访问80端口时,请求的Host字段值就是服务器IP,如果你没有将该IP配置为任意一个虚拟主机的ServerName或ServerAlias,Apache无法找到对应的虚拟主机,就会直接返回默认虚拟主机的内容。
Virtualmin 场景的补充说明
Virtualmin 创建虚拟主机时,会按虚拟主机的创建顺序生成独立的配置文件,Apache 加载配置时会按配置文件的文件名排序依次读取,先被加载的虚拟主机就会成为对应IP+端口的默认虚拟主机。你可以通过以下命令验证当前的默认虚拟主机:
- Debian/Ubuntu 系统执行:
apache2ctl -S - CentOS/RHEL 系统执行:
httpd -S
命令输出中对应你的IP:80条目下标注了default server的就是当前生效的默认虚拟主机。
内容的提问来源于stack exchange,提问作者amiraljack
相关产品推荐
相关产品推荐

