SEO 百科

CNAME

本页目录

CNAME

CNAME 起别名的作用,把一个名称指向另一个名称。RFC 1035 的原话是「the canonical name for an alias」,也就是别名的规范名称,编号排 5[1]。站长在把 www 并到主域名、把子域名接到第三方服务、验证站点归属时都会用到它。查询时要顺着被指向的名称再走一步,才拿到最终地址。它和 A 记录最实在的差别在指向哪里,主域名上还有 A 记录没有的一条限制。

与 A 记录指向的分别

两条记录填的值不是一类东西。A 记录右边是一个 IPv4 地址,是一串数字;CNAME 右边是另一个域名,是一个名称[1]。同样是 www.example.com,用 A 记录就直接写它的 IP,用 CNAME 就写它要跟随的那个名称,比如 example.com,真正的地址由那条名称上的 A 记录给出。

这也带来一层额外开销。CNAME 指向的是名称,解析器要先取到别名指向的规范名称,再去查这个名称的 A 记录,比一条 A 记录多走一步。目标地址经常变的场景适合用 CNAME,跟着源头改就行;地址固定、又在意这一跳的,用 A 记录更直接。

什么时候用 CNAME

最常见的用处是把一个名称并到另一个名称下面。ICANN 说明,注册 example.com 后,你可以在它下面再开一个子名称,例如 cookies.example.com[3]。CNAME 就是用来把一个名称指到另一个名称下面。区域文件里一行是一条 CNAME,右边写被指向的名称:

; 把 www 作为别名指向主域名
www.example.com.   86400  IN  CNAME  example.com.

第二种用处是把自己的域名接到别人托管的地址上,例如 CDN 或建站平台给一个目标域名,让你用 CNAME 指过去,之后它换 IP 你不用跟着改。第三种是站点验证,Google 说明,创建站点归属验证时,可以用一条 DNS CNAME 记录证明域名属于你,这适合不方便加 TXT 记录的场景[4]。

主域名上的限制

裸域,也就是不带 www 的主域名 example.com(叫 zone apex,区域顶点),通常不能放 CNAME。原因在记录之间会打架。

一个区域的顶点必须带着说明这个区域起点的 SOA 记录,和标明由谁负责解析的 NS 记录[1]。而 CNAME 有另一条规矩:Let's Encrypt 在讲 CAA 检查时写明,一个带 CNAME 记录的名称,不允许再有别的记录[2]。顶点上已经坐着 SOA 和 NS,再放 CNAME 就违反这条,两者只能留一个。所以主域名一般用 A 记录直接落地址,别名 CNAME 留给 www 这类子名称。

要在裸域上实现「跟着一个目标名称走」的效果,一些解析商提供 ALIAS 或 ANAME 这类别名记录,它们在外观上像 CNAME,实际由解析商在顶点替你解析出地址,避开了上面这条冲突。这类记录归解析商实现,见条目 解析商。

附录

参见

参考资料

官方(境外)

  1. 《RFC 1035 : STD 13 : Domain names - implementation and specification》,IETF。
  2. 《Certificate Authority Authorization (CAA)》,Let's Encrypt。
  3. 《About Domain Names》,ICANN。
  4. 《Domain verification using CNAME records》,Google 搜索中心,2012-08-02 更新。

外部链接

无。