我有一台服务器,上面托管着一些网站。
目前,每个站点都有由独立提供商托管的域名,并且每个站点都有指向服务器 IP 地址的 A 记录。
但是如果我将来想要更改服务器,我将不得不返回并更新每个 DNS 记录中的每个 IP 地址。
是否可以在每个域上使用 CNAME 记录指向我直接控制的另一个域?
这样我就可以自己在一个地方更新 IP 地址,而不必让所有其他 DNS 提供商分别更新他们的记录?
答案1
这正是 CNAME 的意义所在。CNAME 不需要指向同一区域中的 DNS,它可以指向在任何名称服务器上注册的任何 DNS 名称。
对于您的客户端来说,这意味着需要在 NS 上对其他主机进行额外的 DNS 查找,但对于互联网上的大多数网站来说,这只是一个小小的代价。
答案2
根据 Farseeker 的回答,是的,这就是(某种程度上)CNAME
记录的用途。
然而虽然你可以用它来指向www.example.net
,但www.example.com
你不能用它来指向其他东西example.net
(即不带www
前缀)。
这是因为example.net
还必须有一个SOA
记录和多条记录,并且在 DNS 中,在树的同一部分与任何其他记录(DNSSEC 密钥除外)NS
存在记录是不合法的。CNAME
上面的“某种”限定词,是因为严格来说,CNAME
记录引入了“左侧”作为别名对于记录的目标CNAME
,该目标实际上是“规范名称”。
因此如果你看到例如:
www.example.net IN CNAME www.example.com.
这是不是说www.example.net
应该“重定向”到www.example.com
,这是www.example.net
说另一个名字 www.example.com
。
答案3
对的,这是可能的。
这就是我建立实验性 Web 服务器的方式,该服务器也具有动态 IP(尽管很少更改)。
答案4
我将必须返回并更新每个 DNS 记录中的每个 IP 地址。
好吧,CNAME 确实是一个可能的解决方案(请参阅 Alnitak 对 CNAME 限制的回复),但还有另一个解决方案:不要手动管理区域文件,而是创建一个十行程序(Perl / Python / Ruby / cpp / m4 / 等等),它将从主程序(文本文件、XML 文件、DBMS 等等)生成区域文件
这样,您的 IP 地址就只能在一个地方。当 IP 地址发生变化时,只需重新运行该程序即可。