CNAME 很常见,一般人都很熟悉,将一个域名映射到另外一个域名。但是CNAME 有个限制,顶级域名(apex domain)不建议设置CNAME,因为会和MX 记录冲突,详细解释:为什么裸域名不可以设置 CNAME?#26。
A CNAME record is not allowed to coexist with any other data. In other words, if suzy.podunk.xx is an alias for sue.podunk.xx, you can't also have an MX record for suzy.podunk.edu, or an A record, or even a TXT record...
所以就诞生了ANAME,有些DNS 服务商叫做ALIAS,可以在apex domain 上实现类似CNAME 效果。第一次见到这个,是在配置Github Pages。
目前只有一些国外的DNS 服务商支持:
Do you support ALIAS or ANAME DNS records?
- CloudFlare
- DNSMadeEasy
- DNSimple
- PointDNS
- Amazon Route 53 (only for hosting on AWS)
不过这是非标准的实现,生产环境还是少用为好。
DNAME
除了ANAME,CNAME,还有一个DNAME。DNAME 和CNAME 的区别是,CNAME 只是映射一个子域名,DNAME 映射的是整个子域名空间。
举个例子:
aaa.example.com CNAME bbb.example.org
还可以添加记录
a1.aaa.example.com CNAME b1.bbb.example.org
aaa
的CNAME 只是表示把aaa
这个子域名映射过去,并不影响*.aaa
。但是如果DNAME 的话,就不一样了
aaa.example.com CNAME bbb.example.org
这个时候你再解析a1.aaa.example.com
,得到的实际是a1.bbb.example.org
的结果。因为aaa.example.com
节点包括其子节点都映射到了bbb.example.org
。
更详细的例子可以参考台湾网友的这篇文章:DNS的CNAME/DNAME傻傻分不清楚。
另外DNAME 记录,国内的DNS 服务商也几乎都不支持╮(╯▽╰)╭ 。