有人能解释一下两个主机名是否可以共享同一个 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。
此功能称为任播。