为什么CDN DNS设置需要A

Why CDN DNS settings requires A

可能是个简单的问题,我漏掉了一些微不足道的东西,但是... 典型的 CDN 封装设置是:

为什么用A记录?为什么不对根域也使用 CNAME 记录?

因为如果您想在同一域下拥有其他记录,则不能拥有根域的 CNAME 记录。 DNS 规范不允许这样做,特别是在 RFC 1034 (http://www.faqs.org/rfcs/rfc1034.html)

If a CNAME RR is present at a node, no other data should be present; this ensures that the data for a canonical name and its aliases cannot be different. This rule also insures that a cached CNAME can be used without checking with an authoritative server for other RR types.

如果你有 CNAME 扁平化,那么你 "could" 就可以了。

CNAME 记录是否可以用于根域由该域的 DNS 服务提供商决定。它与该域的 CDN 提供商无关。

CNAME 到根域不是标准的 DNS 功能,因此许多 DNS 服务提供商不支持它。这也是为什么根域在某些情况下必须指向来自 CDN 提供商的 A 记录的原因。

其他DNS服务商支持CNAME到根域的情况,你将根域配置为指向CNAME,在挖掘时仍然会发现一条A记录,这就是CNAME扁平化。

以我这个站点whatsmycdn.com为例,它其实是指向CDN CNAME的,但是CNAME扁平化的结果,你挖的时候只能看到CDN虚拟IP:

dig whatsmycdn.com +short
110.232.178.193

大多数 DNS 提供商不允许您将根域指向其他记录然后是 A 记录,原因是 RFC 规则禁止这样做。 最佳做法是按照 Incapsula 的指示指向根记录,并使用他们的管理控制台将根域指向 WWW 以避免延迟(CNAME 使用地理位置)。