两个主机名可以共享同一个 IP 地址吗?

两个主机名可以共享同一个 IP 地址吗?

有人能解释一下两个主机名是否可以共享同一个 IP 地址吗?

如果一个主机名代表多个 IP 地址,那也可能吗?为什么?

答案1

还可以为一个主机名分配多个 IP 地址:

rr.example.com.        A      192.0.2.12
rr.example.com.        A      192.0.2.23
rr.example.com.        A      192.0.2.34
rr.example.com.        A      192.0.2.45

当您查询 DNS 服务器时,rr.example.com您将获得一个 IP 地址列表。然后您可以选择连接到其中一个。如果第一次连接尝试被主动拒绝,只需尝试下一次。

只要端点主动拒绝 TCP 连接,大多数浏览器都会遵循此流程。如果端点超时,即使尚未尝试所有 IP,资源也将被视为无法访问

由于大多数应用程序(包括浏览器)通常一次只对 1 个 IP 端点感兴趣并且只选择第一个可用的答案,因此您可能会冒着在目标服务器之间分散负载的风险,以至于第一个服务器获得所有流量,而其他服务器可能处于空闲状态。

为了避免这种情况,大多数 DNS 服务器都提供所谓的“循环”配置,使服务器交替返回相等匹配记录的顺序。在负载平衡器普及之前,这是一种有效的负载平衡方法,并且在某种程度上实现了网络系统的容错能力。

答案2

是的,多个主机名可以使用相同的 IP 地址,最佳做法是使用 CNAME 记录指向 A 记录

bar.example.com.        CNAME  foo.example.com.
foo.example.com.        A      192.0.2.23

记下所有句号。

使用一个主机名来代表多个 IP 地址会稍微复杂一些。如果我们谈论的是 MX 记录,这种解决方案在 DNS 中已经存在,使用优先级数字,如果你想让它代表多个 A 记录,你最好使用负载均衡器,例如 HAProxy。

答案3

除了其他答案建议的 CNAME 更改之外,您还必须处理托管服务器上的逻辑。我使用 Apache,并将其配置为:

<VirtualHost 1.2.3.4:80>
    ServerName  www.abc.com
    ServerAlias abc.com
    ...
</VirtualHost>

<VirtualHost 1.2.3.4:80>
    ServerName  www.xyz.com
    ServerAlias xyz.com
    ...
</VirtualHost>

我确信其他 http 服务器软件也有类似的东西。

答案4

还值得注意的是,在 IPv6 中,您可以将同一个 IP 分配给两个或多个主机,网络将为您进行负载平衡和故障转移(如果一个主机无法访问,请尝试另一个主机)。两者都被视为一个逻辑端点,并且根本不涉及 DNS。

此功能称为任播

相关内容