为什么不建议给域名裸域添加CNAME记录
很多提供权威 DNS 解析的服务商都不提供域名裸域又叫根域(root record)的 CNAME 解析,有些即使提供了也会在你添加裸域的 CNAME 记录时给你一个警告提醒。
万网的权威 DNS 解析服务,当给域名的裸域添加 CNAME 时就会报错,说是不支持给裸域添加 CNAME 记录;国内比较知名的权威 DNS 服务商 DNSPod 也会在你给域名的裸域添加 CNAME 解析时提醒你:如果发现邮件收发异常请删除这条域名的 CNAME 解析。
为何这些权威 DNS 服务提供商都不建议给裸域添加 CNAME 记录呢?这个要从 DNS 协议这块来说起了。DNS 协议是在 1987 年 11 月起草的,当时压根没有人知道万维网(World Wide Web),因为万维网的概念是在两年后的 1989 年被万维网之父 Tim Berners-Lee 提出的。当时也更不会有各种提供绑定域名服务的互联网建站公司了。因此 DNS 协议规定不能给裸域添加 CNAME 记录。
CNAME(Canonical name),即一个域名的别名,如果你的域名 abc.com的 CNAME 记录是xzy.com,那么就可以说abc.com是xyz.com的别名。既然abc.com是xyz.com的别名了,那么查询abc.com的其他记录比如 MX(Mail eXchange) 记录,就直接用xyz.com的 MX 记录就行了。对别名的理解是这样的,并且 DNS 协议也明确规定了,更详细的内容可以查看 RFC 1034 和 RFC 1035。
举个例子来说:
abc.com CNAME xyz.com
abc.com MX xxx.com
xyz.com MX zzz.com
以上的意思很明显,abc.com的 CNAME 记录是xyz.com,而abc.com的 MX 记录是xxx.com,xyz.com的 MX 记录是 zzz.com。
当你访问abc.com这个地址的网页服务时,你拿到的是xyz.com,然后被本机缓存起来了。接着你再给abc.com这个域名发送邮件时,根据 DNS 协议规定,你的公共 DNS 服务器(也叫缓存 DNS 服务器)会先去本机 DNS 缓存里查询abc.com的 CNAME 记录是否存在,如果存在就再去查询这个 CNAME 记录的 MX 记录,然后向这个 MX 服务器发送邮件。而在这个例子中会导致本该发送给xxx.com MX 服务器的邮件结果发送给了zzz.com MX 服务器。
当然,反过来,即先发邮件再打开网页就不会有问题。
所以,不止不建议给裸域添加 CNAME 记录,如果其他子域提供邮件服务的话也是不能添加 CNAME 记录的。比如你提供邮件服务的子域是sub.abc.com即邮箱地址类似xxx@sub.abc.com,那么你不是能给sub.abc.com添加 CNAME 记录的。之所以很多服务商不支持给裸域添加 CNAME 是因为裸域使用邮件服务的概率比较大。
另外,也有些比较有实力的服务商会提供诸如将裸 CNAME 记录转换成 A 记录的功能。就像 CloudFlare.com 提供的 CNAME Flatten 服务。原理就是你显式的添加 CNAME 记录,而 CloudFlare 在背后将 CNAME 记录递归解析并转换成 A 记录。由于 CloudFlare 的数据中心比较多,所以返回给你的递归解析后的记录也是离你最近的记录,根本不用担心访问速度的问题。
----------------------------------- 补充信息 --------------------------------------------
1. A记录(IP指向)
又称IP指向,用户可以在此设置子域名并指向到自己的目标主机地址上,从而实现通过域名找到服务器找到相应网页的功能。
说明:指向的目标主机地址类型只能使用IP地址。
2. CNAME(别名指向)
通常称别名指向。您可以为一个主机设置别名。相当于用子域名来代替ip地址,优点是如果ip地址变化,只需要改动子域名的解析,而不需要逐一改变ip地址解析。
说明:
(1)CNAME的目标主机地址只能使用主机名,不能使用IP地址;
(2)主机名前不能有任何其他前缀,如:http://等是不被允许的;
(3)A记录优先于CNAME记录。即如果一个主机地址同时存在A记录和CNAME记录,则CNAME记录不生效。
(4)CNAME最典型的应用CDN,一般都是很多域名CNAME到CDN服务商单个域名下的子域名。
3. MX记录
邮件交换记录。用于将以该域名为结尾的电子邮件指向对应的邮件服务器以进行处理。如:用户所用的邮件是以域名mydomain.com为结尾的,则需要在管理界面中添加该域名的MX记录来处理所有以@mydomain.com结尾的邮件。
说明:
(1)MX记录可以使用主机名或IP地址;
(2)MX记录可以通过设置优先级实现主辅服务器设置,"优先级"中的数字越小表示级别越高。也可以使用相同优先级达到负载均衡的目的;
(3)如果在"主机名"中填入子域名则此MX记录只对该子域名生效。
4. NS记录(Name Server)
是域名服务器记录。用来表明由哪台服务器对该域名进行解析。您注册域名时,总有默认的DNS服务器,每个注册的域名都是由一个DNS域名服务器来进行解析的,DNS服务器NS记录地址一般以以下的形式出现:
ns1.domain.com
ns2.domain.com
说明:
(1)"优先级"中的数字越小表示级别越高;
(2)"IP地址/主机名"中既可以填写IP地址,也可以填写像ns.mydomain.com这样的主机地址,但必须保证该主机地址有效。如,将 news.mydomain.com的NS记录指向到ns.mydomain.com,在设置NS记录的同时还需要设置ns.mydomain.com的 指向,否则NS记录将无法正常解析;
(3)NS记录优先于A记录。即,如果一个主机地址同时存在NS记录和A记录,则A记录不生效。这里的NS记录只对子域名生效。
域名:
为什么不建议给域名裸域添加CNAME记录的更多相关文章
- 体验godaddy域名转入,添加A记录,及使用dnspod的NS
有两个域名一直放在朋友那,这个朋友是个神人,经常换电话号码,联系非常不方便. 近日将域名转入到godaddy下面了,第一次做域名转移,很是好奇. 之前域名在21.cn注册的,朋友帮我申请域名转出后,2 ...
- 域名相关:DNS A记录 NS记录 MX记录 CNAME记录
1. DNSDNS:Domain Name System 域名管理系统 域名是由圆点分开一串单词或缩写组成的,每一个域名都对应一个惟一的IP地址,这一命名的方法或这样管理域名的系统叫做域名管理系统.D ...
- 关于查看域名A记录,MX记录,CNAME记录-NSLOOKUP用法介绍
关于查看域名A记录,MX记录,CNAME记录-NSLOOKUP用法介绍 用ping查看域名的IP地址,这样只能查到域名的A记录,要查询域名的MX记录.CNAME记录或NS记录,可用nslookup命令 ...
- nginx配置允许指定域名下所有二级域名跨域请求
核心原理是根据请求域名匹配是否是某域名的二级域名判断是否添加允许跨越头. #畅游www server { listen 8015; server_name test-tl.changyou.com; ...
- Java Web中实现设置多个域名跨域访问
添加以下设置可允许所有域名跨域访问: response.setHeader("Access-Control-Allow-Origin","*"); 但在实际应用 ...
- 在ExpressJS中设置二级域名跨域共享Cookie
问题:我使用expressjs和mongostore来管理session.下面是expressjs中的设置. app.configure(function(){ app.use(express.ses ...
- Let'sEncrypt 免费通配符/泛域名SSL证书添加使用教程
Let'sEncrypt 免费通配符/泛域名SSL证书添加使用教程 通配符证书一般还是比较贵的一般最便宜的通配符证书5.60美元一年,只不过Let'sEncrypt的有效期是3个月,对于一般用户来说基 ...
- flask同源策略解决办法及flask-cors只允许特定域名跨域
falsk 同源策略解决办法: 使用 flask-cors 包 并且 在代码里 加响应的一行代码解决. from flask import Flask, session from flask_cors ...
- 经实测解决Access-Control-Allow-Origin多域名跨域问题
网上流传2种方法解决多域名跨域问题:1.Access-Control-Allow-Origin:[域名一],[域名二]: 2.用$_SERVER("HTTP_ORIGIN")获取来 ...
随机推荐
- StreamSets学习系列之StreamSets的Core Tarball方式安装(图文详解)
不多说,直接上干货! 前期博客 StreamSets学习系列之StreamSets支持多种安装方式[Core Tarball.Cloudera Parcel .Full Tarball .Full R ...
- 基于Web Service的客户端框架搭建三:代理层(Proxy)
前言 代理层的主要工作是调用Web Service,将在FCL层序列化好的Json数据字符串Post到Web Service,然后获得Reponse,再从响应流中读取到调用结果Json字符串,在Dis ...
- 第七章 过滤器基础 Filter
简介:SUN从Servlet2.3开始添加一项激动人心的功能,就是过滤器(Filter).WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图 ...
- java sendmail
http://blog.csdn.net/Guerlei/article/details/53189522
- SpringMvc @RequestParam 使用推荐使用包装类型代替包装类型
SpringMvc 中@RequestParam注解使用 建议使用包装类型来代替基本数据类型 public String form2(@RequestParam(name="age" ...
- JavaScript 内存泄露以及如何处理
一.前言 一直有打算总结一下JS内存泄露的方面的知识的想法,但是总是懒得提笔. 富兰克林曾经说过:懒惰,像生鏽一样,比操劳更能消耗身体,经常用的钥匙总是亮闪闪的.安利一下,先起个头. 二.内存声明周期 ...
- 深入出不来nodejs源码-V8引擎初探
原本打算是把node源码看得差不多了再去深入V8的,但是这两者基本上没办法分开讲. 与express是基于node的封装不同,node是基于V8的一个应用,源码内容已经渗透到V8层面,因此这章简述一下 ...
- php一些单选、复选框的默认选择方法(示例)
转载 http://www.php.cn/php-weizijiaocheng-360029.html 一. radio和checkbox及php select默认选择的实现代码 1.radio单选框 ...
- mybatis-generator-maven逆向工程
在idea 中使用 mybatis的 mybatis-generator-maven-plugin 可以根据数据库 生成 dao层,pojo类,Mapper文件. 一: 在 pom.xml ...
- 快速导出云服务器mysql的表数据
1.许多互联网应用的数据库都布署在远程的Linux云服务器上,我们经常要编辑表数据,导出表数据. 通常的做法是ssh连接到服务器,然后命令登录,命令查询导出数据,费时费力,效率低下. 安装TreeSo ...