很多提供权威 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. Azure Redis 缓存使用注意事项与排查问题文档整理

    StackExchange.Redis 使用名为 synctimeout 的配置设置进行同步操作,该设置的默认值为 1000 毫秒. 如果同步调用未在规定时间内完成,StackExchange.Red ...

  2. Java - replace a character at a specific index in a string?

    String are immutable in Java. You can't change them. You need to create a new string with the charac ...

  3. 如何用R来处理数据表的长宽转换(图文详解)

    不多说,直接上干货! 很多地方都需用到这个知识点,比如Tableau里.   通常可以采取如python 和 r来作为数据处理的前期. Tableau学习系列之Tableau如何通过数据透视表方式读取 ...

  4. ActiveMQ——activemq的报错见解javax.jms.JMSException: Software caused connection abort: recv failed

    activeMQ出现javax.jms.JMSException: Software caused connection abort: recv failed的问题解决 一直找不到原因,原来是在本地的 ...

  5. [Python学习笔记-001] 内置函数getattr()

    如果某个实例foo有多个方法, 当对foo的每一个方法我们都需要使用try ... except ...进行包装的时候,内置函数getattr()可以用来精简代码. 1. getattr()的用法 # ...

  6. DataSet 多表关系

    protected void Page_Load(object sender, EventArgs e) { string connectionString = @"Data Source= ...

  7. js写的一个简单的手风琴菜单

    1 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&q ...

  8. JVM学习记录-类加载器

    前言 JVM设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外面去实现,以便让应用程序自己决定如何去获取所需要的类.实现这个动作的代码模块称为“类 ...

  9. 呼叫WCF Service的方法出现Method not allowed异常

    asp.net mvc练习程序,经常性在家里电脑,笔记本或是公司的电脑之间拷贝与粘贴,如果忘记携带最新的练习程序,一些小功能只能重新写了.如前一篇<ASP.NET MVC呼叫WCF Servic ...

  10. 获取当前iframe动态加载文档的href

    Insus.NET想实现一个功能,一个旧的站点A,它有两个网页logon.aspx和Default.aspx(登录成功能访问).由于某些原因,需另建一个新站点B,这个新站点B也有两个网页B_Index ...