A记录属于DNS体系当中间最为根本的解析类型之一, CNAME记录也是DNS系统里面最为基础的一类解析记录。这两者之间的本质区别非常明确。具体来说, A记录的功能是把一个域名直接映射到一个IP地址那里去。
另一方面, CNAME记录做的事情是把一个域名指向到另外一个域名, 通常这个被指向的域名就是别名。简单的道理就是A记录完成了从域名为起始端到IP地址为终点的直连关系。相比之下, CNAME记录体现的是从域名到另一个域名的间接引用过程。只有真正搞清楚了这个核心的逻辑差异点。
才能在后续的实践中做出正确的选择去使用对应的记录类型。
核心差异对比
典型适用场景
A记录适用于:
根域名(@)的解析配置;
把那个域名的地址指向一个特定的服务器IP地址, 这个服务器可以是有自有IDC的机房里的服务器, 也可以是裸机的服务器。
需要和MX记录, 以及TXT记录, 还有SOA记录一样, 在相同的域名下面共同存在。
对于那种对解析路径长度有着非常严格的要求的低延迟敏感业务, 是需要大家注意的。
对于CNAME记录这种东西, 是适用于以下这样的场景的:
把域名指向到CDN节点、或者说负载均衡器, 还有对象存储这些带有动态IP的服务当中去。这就好比gname.xin这个域名的静态资源子域名, 需要被指向到由CDN厂商提供的那个CNAME目标地址上面去。
子域名的别名记录会指向到主域名, 这里说的情况是www这个子域名被设定为指向apex主域名。
在多环境进行切换的时候, 只需要去变更CNAME所指向的内容, 这样就能够实现对整套后端的切换。
第三方提供的软件即服务类的产品在进行域名的接入操作时, 通常是这样的, 比如在涉及到邮件相关的服务内容或者是像域名系统托管方面的一些情况, 往往会有着必须要设置CNAME这样一条解析记录的具体要求。
选型建议
1. 当这个情况是关于到根域名的时候, 也就是大家说的那个@符号所代表的地址。在这种情况下, 你必须采用A记录这种方式, 或者也可以使用AAAA记录这种方式, 而CNAME这种记录方式在这里是不符合规定的, 也就是说它是不被允许的。
2. 目标IP地址会发生频繁的变化, 在这样的情况下建议优先考虑使用CNAME记录这种方式, 以此来避免一次又一次地去反复修改A记录。
3. 在同一域名下面, 需要进行多条不同记录的配置, 比如说包含MX记录、TXT记录或者是A记录等等。这种情况就必须要去使用A记录了。因为是在CNAME域名底下, 是绝对不允许和其他记录共同存在的。
4. 把那个专门用来指向其他服务器的子域名, 给指向到了服务商自己提供的那个主域名上面去, 这一步骤是应当按照服务商那边提供的操作文档里面的要求, 来配置一个叫作CNAME的记录类型。
常见注意事项
CNAME不支持在根域名上配置, 这是DNS协议规范规定的硬性限制。部分服务商提供的ALIAS或者ANAME记录是可以绕过这个限制的。但是这并不是标准的CNAME。
CNAME链嵌套过深会增加解析延迟A记录与CNAME区别,建议链深度不超过2层。
在去配置CNAME这件事之前, 必须先要去确认一下目标域名的解析情况是不是已经正常了, 这么做的原因呢, 就是为了去避免出现那种级联故障的情况。
在同名的情况下, CNAME记录不能够和任何其他类型的记录相互存在, 这两者是互斥的, 所以当需要迁移这些记录的时候, 首先要把旧的记录给删除掉, 然后才能再去添加新的记录。
掌握上面提到的这些区别以及相关的规定, 就可以在实际做DNS配置的时候做出比较准确的选型选择, 从而避免因为解析出现异常而导致的业务中断情况。


