对于有配置过DNS的人,一般都知道DNS的A、CNAME、MX这样的记录,但是不一定大家都知道ALIAS和ANAME记录。那么这两个记录到底是什么意思呢?这两个分别是DNSimple和DNS Made Easy两个域名注册商针对Paas应用的一条特别的记录,相当顶级域名(root/base/apex domain, or top level domain)的CNAME。
创建PaaS(Platform-as-a-Service: 平台即服务)应用的时候,我们经常会使用自定义域名。这时候我们一般会用CNAME把自己的域名指向PaaS提供的一个域名。而这个域名一般是会有智能DNS解析,会把离用户最近的CDN(Content Delivery Network 内容分发网络)服务器IP返回给用户,提高访问速度。这样无论用户在世界哪个角度,都能获得比较理想的访问速度。例如把应用放在Amazon上,然后把自己注册的域名www.xxx.com指向Amazon提供的域名,然后用户访问www.xxx.com域名,实际服务由Amazon提供。这样很好很强大,对吧?那如果我们想把xxx.com也指向Amazon的应用呢?加一条xxx.com的CNAME记录?这是不可行的,因为RFC1912有如下规定:
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. Especially do not try to combine CNAMEs and NS
records like this!:
podunk.xx. IN NS ns1
IN NS ns2
IN CNAME mary
mary IN A 1.2.3.4
也就是说有了CNAME记录之后,不能再有其他记录,而apex domain如上是需要有NS记录的,这样的话就不能用CNAME记录。这种情况下就诞生了ALIAS和ANAME这样的记录。由于现在没有统一的标准,所以不同的域名注册商用了不同的名字,是私有实现。当然,如果域名注册商不支持这样的记录,我们可以只用www.xxx.com这样的次级域名,也可以强制xxx.com重定向到www.xxx.com,但ALIAS和ANAME记录感觉要方便一些。现在,对于ALIAS和ANAME这样的记录的使用实际上也有些争议,大家可以了解一下。