为什么不建议给域名裸域添加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")获取来 ...
随机推荐
- jieba分词(1)
近几天在做自然语言处理,看了一篇论文:面向知识库的中文自然语言问句的语义理解,里面提到了中文的分词,大家都知道对于英文的分词,NLTK有很好的支持,但是NLTK对于中文的分词并不是很好(其实也没有怎么 ...
- 本机spark 消费kafka失败(无法连接)
本机spark 消费kafka失败(无法连接) 终端也不报错 就特么不消费: 但是用console的consumer 却可以 经过各种改版本 ,测试配置,最后发现 只要注释掉 kafka 配置se ...
- 最大子数组问题/Maximum Subarray
问题描述: Find the contiguous subarray within an array (containing at least one number) which has the la ...
- 【Java初探03】——流程控制语句
做任何事情都应当遵守一定的原则,程序设计也是如此,需要有流程控制语言来实现与用户的交流.流程控制对于任何一门编程语言来说都是至关重要的,它提供了控制程序步骤的基本手段,如果没有流程控制语句,整个程序将 ...
- Ansible-安装-秘钥-部署-使用
本文转自:https://www.cnblogs.com/ylqh/p/5902259.html ansiblemaster:192.168.74.146 ansibleslave1 :192.168 ...
- postman参数化 接口响应数据获取符合条件的内容参数化给后面的接口使用
一:主要内容 从响应结果中找到满足条件的key,获取其value,参数化给后面的接口使用 二:参数化获取想要的value值,传给后面的接口使用 有时我们获取的响应数据,需要的那个字段可能在一个数组里面 ...
- offsetTop、offsetLeft、offsetWidth、offsetHeight的用法
假设 obj 为某个 HTML 控件. obj.offsetTop 指 obj 相对于版面或由 offsetParent 属性指定的父坐标的计算上侧位置,整型,单位像素. obj.offsetLeft ...
- intellij idea 怎么全局搜索--转
https://jingyan.baidu.com/article/29697b9163ac7dab20de3cbf.html intellij idea是一款智能,功能强大的ide,对比eclips ...
- angular ng-repeat元素swiper无法滑动问题解决
前言 angular中ng-repeat元素swiper无法滑动,angular与swiper冲突. 1.问题 在项目中,我需要利用ng-repeat循环li,比如一个nav导航条,在加入swiper ...
- UIKit 框架之UIView一
- (id)initWithFrame:(CGRect)aRect //通过一个矩形对象初始化 Configuring a View’s Visual Appearance //配置视觉展示 @pro ...