Route53中A记录和CNAME记录的区别

53

由于Amazon Route 53允许您使用别名将A记录或CNAME设置为不同的子域名,因此我想知道现在A记录和CNAME之间的区别是什么。

为了澄清我的问题,在传统的NameServer中,CNAME和A记录之间的区别在于只有CNAME可以用于指向不同的子域名,而A记录必须指向有效的IP地址。由于AWS Route53允许您使用子域名和A记录或CNAME,是否模糊了两者之间的区别。

2个回答

102

你的问题很合理,但你使用的“子域名(subdomain)”这个词不太准确。

实际上,你问的是关于Route 53中A记录似乎可以引用另一个域名下的完全限定主机名或其自己域名下的主机名或子域名。在正确的DNS中,唯一引用其他主机名的方式是使用CNAME,但是这些无法被提供到指向子域名("example.com")的域的顶级("www.example.com")。

你说,别名似乎在功能上等同于但比CNAME更灵活,那么两者有什么区别呢?

CNAME和别名之间的区别在于CNAME仍然是一个标准的、普通的DNSCNAME,它返回一个DNS查询响应:“嗨,您需要知道要查找的服务器的真正(“规范”的)名称为'x'”,根据情况,还可能包括目标主机的A记录或可能不包括,需要客户端进行第二次查找。

另一方面,别名是由亚马逊创建的聪明黑客技巧,它不会破坏协议,但允许Route 53在请求资源“Y”的A记录时直接从资源“X”中提供A记录。别名也可以引用其他记录类型,但它们引用的记录类型必须相同。就本文而言,我正在谈论A记录别名。

重要的是,别名实际上返回一个A记录 - 而不是像CNAME一样返回到目标的引用。

问题在于使用别名时,您不能仅在该框中放置任何主机名。它必须是一个主机名,在 Route 53 具有神奇钩子的域内,以便它可以检索适当的 A 记录来提供服务-可以是您区域中的另一个条目,也可以是来自 S3、ELB 或 Cloudfront。这与CNAME记录的工作方式非常不同,尽管净效果看起来相同。

在那里放置其他内容,将会出现错误:记录集无法保存,因为:-别名目标包含无效值。尝试一下。:)

当然,CNAME记录没有这样的限制... 他们只限于设计在区域顶部的使用。

因此,实际上,别名和CNAME记录没有像您最初想象的那样多的重叠。在某些情况下,只能使用其中之一,在任何一个都可以使用的情况下,差异可能是微不足道的。

在任一选项可用的情况下,别名的一个优点是,如上所述,别名永远不需要 2 个 DNS 查询。它始终由 Route 53 直接回答正确的 A 记录,而一个CNAME,至少在它引用不同顶级域中的主机名的情况下,可能需要进行两个连续的 DNS 查找,在这种情况下,别名具有理论上的性能优势。


2
哇,谢谢你提供如此详细的答案。我的理解得到了很大的提高。 - Scalable
1
很好。如果您没有其他需要我澄清的问题,请考虑接受我的答案。 - Michael - sqlbot
2
只是为了增加一点混淆,你可以有"别名CNAME"。如果你想让cdn1.website.com、cdn2.website.com和cdn3.website.com都指向同一个第三方域名,你可以将它们的别名cname设置为cdn.website.com,这个cname又会指向website.bestcdn.com。这里的好处是,不需要进行两次cname查找(内容加载时会有延迟),只需要进行一次查找,并且只需要更新一条记录,如果cdn发生变化。如果你要问为什么在同一个地方使用多个cdn URL?这是一种增加并发资源下载的技巧。 - KHobbits
@KHobbits 同意。如果您正在使用第三方服务,例如lobs.domain.ext存储在Google云端,那么CNAME记录基本上是必不可少的,这些提供商可能更喜欢/要求使用CNAME。 - mckenzm
1
@mckenzm 确实。这个答案真正关注的是A记录别名,这是Alias记录通常使用的方式,但您可以创建AAAACNAME别名,或者--显然--为除了NSSOA之外的任何类型的记录创建别名,如果引用自己托管区域中的另一条记录。 - Michael - sqlbot

1

我认为您的信息有误。Amazon Route53不允许使用子域的A记录。当我尝试将其设置为域名时,出现了错误:

The record set could not be saved because:
- The Value field contains invalid characters or is in an invalid format.

"

A记录仅用于IP地址。

"

1
感谢yegor256的回复 - 但是你应该尝试这个: 设置别名:是的 这将启用下面标记为“别名目标”的文本框..在其中您可以放置一个子域..我通常在那里放置一个负载均衡器fqdn。所以我认为我的问题非常合理。 - Scalable
别名在底层仍然是适当的 ACNAME 记录。它们所做的就是将 DNS 解析映射到其他服务。 - datasage

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接