当两个或多个 vhost 绑定到一个 ip 时,ip 地址指向哪个 vhost?

当两个或多个 vhost 绑定到一个 ip 时,ip 地址指向哪个 vhost?

配置绑定两个域名

www1.example.com
www2.example.org

到一个 IP 地址172.20.30.40

<VirtualHost 172.20.30.40:80>
    ServerAdmin [email protected]
    DocumentRoot "/www/vhosts/www1"
    ServerName www1.example.com
    ErrorLog "/www/logs/www1/error_log"
    CustomLog "/www/logs/www1/access_log" combined
</VirtualHost>

<VirtualHost 172.20.30.40:80>
    ServerAdmin [email protected]
    DocumentRoot "/www/vhosts/www2"
    ServerName www2.example.org
    ErrorLog "/www/logs/www2/error_log"
    CustomLog "/www/logs/www2/access_log" combined
</VirtualHost>

我的困惑是:如果我输入172.20.30.50:80,apache 会显示哪个域的网页?
www1.example.com 或者 www1.example.com

答案1

来自 Apache 的基于名称的虚拟主机支持文档:

基于名称的虚拟主机解析仅在将候选范围缩小到最佳的基于 IP 的匹配后才选择最合适的基于名称的虚拟主机。[…]

当请求到达时,服务器将根据请求使用的 IP 地址和端口找到最佳(最具体)匹配参数。[…]

IP 和端口组合的默认基于名称的虚拟主机

如果在包含最具体匹配的 IP 地址和端口组合的虚拟主机集合中未找到匹配的 ServerName 或 ServerAlias,则第一个列出的虚拟主机与之匹配的将被使用。

相关内容