DNS CNAME 记录用作共享单个 IP 地址的域名的别名。
阅读本文后,您将能够:
复制文章链接
“规范名称” (CNAME) 记录用于将别名域名指向一个 "规范" 域名。当一个 域 或子域是另一个域的别名时,CNAME 记录被用来代替 A 记录。所有 CNAME 记录都必须指向一个域名,而不是指向一个 IP 地址。想象一下,在一个寻宝游戏中,每条线索都指向另一条线索,而最后的线索则指向宝藏。一个有 CNAME 记录的域名就像一条线索,可以把你指向另一条线索(另一个有 CNAME 记录的域名)或宝藏(一个有 A 记录的域名)。
例如,假设 blog.example.com 的 CNAME 记录的值为“example.com”(没有“blog”)。这意味着当 DNS 服务器点击 blog.example.com 的 DNS 记录时,它实际上会触发另一个对 example.com 的 DNS 查找,并通过其 A 记录返回 example.com 的 IP 地址。在这种情况下,我们会说 example.com 是 blog.example.com 的规范名称(或真实名称)。
通常,当站点具有子域(例如 blog.example.com 或 shop.example.com)时,这些子域将具有指向根域 (example.com) 的 CNAME 记录。这样,如果主机的 IP 发生更改,则仅需要更新根域的 DNS A 记录,这样所有 CNAME 记录都会跟随对根所做的任何更改。
一个常见的误解是 CNAME 记录必须始终解析为其指向的域所在的网站,但事实并非如此。CNAME 记录仅将客户端指向与根域相同的 IP 地址。客户端访问该 IP 地址后,Web 服务器仍将相应地处理 URL。例如,blog.example.com 可能有一个 CNAME 指向 example.com,从而将客户端定向到 example.com 的 IP 地址。但是,当客户端实际连接到该 IP 地址时,Web 服务器将查看 URL,发现它是 blog.example.com,并且提供博客页面而不是主页。
CNAME 记录示例:
blog.example.com | record type: | value: | TTL |
---|---|---|---|
@ | CNAME | is an alias of example.com | 32600 |
在本示例中,您可以发现 blog.example.com 指向 example.com。假设它基于我们的示例 A 记录,我们便知道它最终会解析到 IP 地址 192.0.2.1。
将 CNAME 记录指向另一个 CNAME 记录十分低效,因为它需要在加载域之前进行多次 DNS 查找——这会降低用户体验,不过这个过程是可以实现的。例如,blog.example.com 可以有一个 CNAME 记录指向 www.example.com 的 CNAME 记录,然后后者指向 example.com 的 A 记录。
blog.example.com 的 CNAME:
blog.example.com | record type: | value: | TTL |
---|---|---|---|
@ | CNAME | 是 www.example.com 的化名 | 32600 |
它指向 www.example.com 的 CNAME:
www.example.com | record type: | value: | TTL |
---|---|---|---|
@ | CNAME | is an alias of example.com | 32600 |
这种配置在 DNS 查询过程中增加了一个额外的步骤,应当尽可能避免。blog.example.com 和 www.example.com 的 CNAME 记录应当直接指向 example.com。
MX 和 NS 记录不能指向 CNAME 记录,它们必须指向 A 记录(对于 IPv4)或 AAAA 记录(对于 IPv6)。MX 记录是邮件交换记录,将电子邮件指向一个邮件服务器。NS 记录是“名称服务器”记录,表明哪个 DNS 服务器是该域的权威。