很多提供权威 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.comxyz.com的别名。既然abc.comxyz.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.comxyz.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记录只对子域名生效。

域名:

1. A记录、CNAME、MX记录、NS记录

2. 为什么不建议给域名裸域添加CNAME记录

为什么不建议给域名裸域添加CNAME记录的更多相关文章

  1. 体验godaddy域名转入,添加A记录,及使用dnspod的NS

    有两个域名一直放在朋友那,这个朋友是个神人,经常换电话号码,联系非常不方便. 近日将域名转入到godaddy下面了,第一次做域名转移,很是好奇. 之前域名在21.cn注册的,朋友帮我申请域名转出后,2 ...

  2. 域名相关:DNS A记录 NS记录 MX记录 CNAME记录

    1. DNSDNS:Domain Name System 域名管理系统 域名是由圆点分开一串单词或缩写组成的,每一个域名都对应一个惟一的IP地址,这一命名的方法或这样管理域名的系统叫做域名管理系统.D ...

  3. 关于查看域名A记录,MX记录,CNAME记录-NSLOOKUP用法介绍

    关于查看域名A记录,MX记录,CNAME记录-NSLOOKUP用法介绍 用ping查看域名的IP地址,这样只能查到域名的A记录,要查询域名的MX记录.CNAME记录或NS记录,可用nslookup命令 ...

  4. nginx配置允许指定域名下所有二级域名跨域请求

    核心原理是根据请求域名匹配是否是某域名的二级域名判断是否添加允许跨越头. #畅游www server { listen 8015; server_name test-tl.changyou.com; ...

  5. Java Web中实现设置多个域名跨域访问

    添加以下设置可允许所有域名跨域访问: response.setHeader("Access-Control-Allow-Origin","*"); 但在实际应用 ...

  6. 在ExpressJS中设置二级域名跨域共享Cookie

    问题:我使用expressjs和mongostore来管理session.下面是expressjs中的设置. app.configure(function(){ app.use(express.ses ...

  7. Let'sEncrypt 免费通配符/泛域名SSL证书添加使用教程

    Let'sEncrypt 免费通配符/泛域名SSL证书添加使用教程 通配符证书一般还是比较贵的一般最便宜的通配符证书5.60美元一年,只不过Let'sEncrypt的有效期是3个月,对于一般用户来说基 ...

  8. flask同源策略解决办法及flask-cors只允许特定域名跨域

    falsk 同源策略解决办法: 使用 flask-cors 包 并且 在代码里 加响应的一行代码解决. from flask import Flask, session from flask_cors ...

  9. 经实测解决Access-Control-Allow-Origin多域名跨域问题

    网上流传2种方法解决多域名跨域问题:1.Access-Control-Allow-Origin:[域名一],[域名二]: 2.用$_SERVER("HTTP_ORIGIN")获取来 ...

随机推荐

  1. 整理学习ASP.NET MVC的资源

    网站 http://www.asp.net/mvc http://stackoverflow.com/questions/tagged/asp.net-mvc+asp.net-mvc-4?sort=n ...

  2. 第六章-Javac符号表

    需要参考: (1)Architecture of a Java Compiler (2)关于符号Symbol第一篇 (3)关于符号Symbol第二篇 (4)关于类型Type (5)关于作用域范围Sco ...

  3. docker使用非root用户启动容器出现“running exec setns process for init caused \"exit status 40\"": unknown”

    环境为centos7,linux内核版本为3.10 出现该问题的原因是内核3.10的bug,升级linux内核即可,升级办法如下,升级完成后重启系统,选择对应的内核版本启动即可. .导入key rpm ...

  4. poi导出联动下拉选择的excel

    最近碰到一个功能, 觉得可以记录下来. 在web中, 经常会碰到上下级的数据, 或者是联动数据, 比如省市联动. 那么在导入数据的时候, 是否可以在动态生成的模板中, 加入联动限制呢. 一. 数据准备 ...

  5. CentOS 7下搭配简单的C语言开发环境

    在CentOS 7下安装gcc,gcc是编译和运行C语言的工具, 安装命令: yum install gcc 中途如果有询问则输入y 安装成功后,通过以下命令 gcc --version 来查看安装的 ...

  6. 利用latex制作个人简历

    转自: http://www.cnblogs.com/panpei/ 前些日子,有点无聊,就在网上逛逛技术大牛的blogs,发现很多大牛都喜欢用pdf版式的简历,发现这种版式的简历排版非常漂亮简洁.深 ...

  7. 导入maven项目遇到中文乱码

    windows->preferences->content types->word Document 并输入utf-8->update; 右键选中的项目,选择propertie ...

  8. 论type与object的关系----Python创世纪

    这篇随笔的灵感来源于学习源码时对type及object关系的疑惑,主要参考了这篇论文: http://www.cs.utexas.edu/~cannata/cs345/Class%20Notes/15 ...

  9. 微信公众号开发笔记1-获取Access Token

    获取你的Access Token a)可以采用网址的形式: 用appid和appsecert获得access token,接口为https://api.weixin.qq.com/cgi-bin/to ...

  10. Charm Bracelet(01背包问题)

    题目链接: https://vjudge.net/problem/POJ-3624 题目描述: Bessie has gone to the mall's jewelry store and spie ...