什么是 DNS CNAME 记录?

DNS CNAME 记录用作共享单个 IP 地址的域名的别名。

学习目标

阅读本文后,您将能够:

  • 了解 CNAME 记录在域名查找中的作用
  • 了解 CNAME 记录和 A 记录之间的关系

复制文章链接

什么是 DNS CNAME 记录?

一个"冠名" (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。

报告
2023 年 GigaOm Radar DNS 安全报告
与专家讨论
了解 Cloudflare 保护您业务的方式

一个 CNAME 记录能否指向另一个 CNAME 记录?

将 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。

快速且安全的 DNS
所有 Cloudflare 计划中均包含免费 DNS

使用 CNAME 记录有什么限制?

MX 和 NS 记录不能指向 CNAME 记录,它们必须指向 A 记录(对于 IPv4)或 AAAA 记录(对于 IPv6)。MX 记录是邮件交换记录,将电子邮件指向一个邮件服务器。NS 记录是“名称服务器”记录,表明哪个 DNS 服务器是该域的权威。

了解有关 MX 记录NS 记录的更多信息。