今天在用阿里云的安全防护给接口域名做web应用防火墙,需要配置cname,原来有用到过但是一直没去了解过,只知道怎么用今天搜了一下看看下面是原文,白话文好理解分享一下。

什么是CNAME?
先简单的说下域名解析(懂的不用看啦): 在以前,人们用IP进行互访,后来发现IP太多不好记忆,便有了域名,比如www.baidu.com,你一看就知道是百度搜索引擎,而不需要管他的服务器IP是多少,但是在最开始通信的时候,电脑路由器不认识域名,只认得IP啊,要怎么去获得对应的IP呢,这时候有了域名解析,就是去请求网络上的DNS服务器,让他们来告诉你这个域名对应的IP是多少,至于请求DNS解析的详细过程,大家就自行搜索啦,这里不赘述。

然后概括地说:

A记录是将域名解析成IP,CNAME是将域名解析成另外一个域名。
在说CNAME之前,要提到一个东西叫 A记录:

1.A记录
A记录,即Address记录,它并不是一个IP或者一个域名,我们可以把它理解为一种指向关系:

域名 www.xx.com → 1.1.1.1

主机名 DD → 2.2.2.2

也就是当你访问这些域名或者主机名的时候,DNS服务器上会通过A记录会帮你解析出相应的IP地址,以达到后续访问目的。所以A记录是IP解析,直接将域名或主机名指向某个IP。

2.CNAME
CNAME记录,也叫别名记录,相当于给A记录中的域名起个小名儿,比如www.xx.com的小名儿就叫www.yy.com好了,然后CNAME记录也和A记录一样,是一种指向关系,把小名儿www.yy.com指向了www.xx.com,然后通过A记录,www.xx.com又指向了对应的IP:

www.yy.com → www.xx.com → 1.1.1.1

这样一来就能通过它的小名儿直接访问1.1.1.1了。

这时候有人问:这不多了一步嘛,不嫌麻烦?

假如这个时候我又想给原域名取几个小名儿,分别叫www.cc.com和www.kk.com那么存在下列指向关系:

www.yy.com → www.xx.com → 1.1.1.1

www.cc.com → www.xx.com → 1.1.1.1

www.kk.com → www.xx.com → 1.1.1.1

突然服务器的IP地址因为一些不可描述的原因要换了,不再是1.1.1.1了,换成了2.2.2.2,这时候你发现,只要把www.xx.com的指向修改一下即可:

域名 www.xx.com → 2.2.2.2
这时候你又发现了,原来他的小名儿不需要做更改,直接就能访问服务器,因为他们都只指向了www.xx.com,服务器IP改没改它们不管。

那么假如不用CNAME,直接做A记录会怎样?

www.yy.com → 1.1.1.1

www.cc.com → 1.1.1.1

www.xx.com → 1.1.1.1

www.kk.com → 1.1.1.1

那么当1.1.1.1更改的时候,全部相关A记录指向关系都要做更改,这才麻烦

3.CNAME的应用
现网常用在CDN加速上,关于CDN大家可以看看下面这篇文章,通俗易懂:
漫话:如何给女朋友解释什么是CDN?

举个CDN的栗子 :

已将原图中www.xdd.com修改为www.dd.cdn.com (2020-0720)


假如你是DD公司老板,你公司中的一台IP为1.1.1.1的服务器,注册了域名为www.dd.com,要对外提供客户访问。随着公司越做越大,访问量也越来越多,服务器顶不住了,你去找CDN提供商购买CDN加速服务,这个时候他们要求你的域名做个CNAME指向他们给你的一个域名叫www.dd.cdn.com

www.dd.com → www.dd.cdn.com

当用户访问www.dd.com的时候,本地DNS会获得CDN提供的CNAME域名:www.dd.cdn.com,然后再次向DNS调度系统发出请求,通过DNS调度系统的智能解析,把离客户端地理位置最近的(或者相对负载低的,主要看CDN那边智能解析的策略)CDN提供商的服务器IP返回给本地DNS,然后再由本地DNS回给客户端,让用户就近取到想要的资源(如访问网站),大大降低了延迟。

__
__
_

评论有博友问:

本地运营商的DNS服务器怎么知道一个域名的授权(权威)服务器是哪台?这个域名应该在哪里取解析呢?
首先公司会去找运营商买域名,比如CDN公司买了cdn.com这个一级域名(相对于a.cdn.com和b.cdn.com来说cdn.com可以称为一级域名,这个不用纠结哈),那么本地运营商会做一个NS记录,即匹配到这个cdn.com后缀的域名都会到CDN服务提供商的DNS服务器做解析,即到权威服务器做解析。
其他记录我有空再详细补充下~

—————————————————————————————————

4.域名缓存问题
最近在公司遇到比较多的是关于域名缓存的问题,在这边简单说下。

  • 还是举个栗子,你搭建了一个权威DNS服务器,这个服务器需要处理用户终端发起的域名查询请求,假如用户量很大,访问域名频繁,或者说有些接口需要频繁调用网站域名的情况,那用户每次调用都去请求解析不太合理,降低了我调用的效率,DNS权威服务器也有负担。所以一般DNS服务器在下发解析的时候是带有缓存时间的(10min或者是1h,主要由DNS服务器决定),而且这个缓存是下发到用户终端、用户终端、用户终端上的(重要的事情说三遍),其实用户在访问域名的第一步不是直接去查解析,而是查本地host文件,然后是看缓存是否有这个解析记录,都没有的话才去请求解析。

所以在公司比较常见到这种情况,内网和公网域名切换的时效问题。

1.内网环境:因为是在内部局域网搭建的DNS,这个缓存时间我们是可控的,比如我们部署为1h缓存时间,如果有客户的域名指向关系需要修改,比如客户提供服务的机器ip要更换了,又想要做到快速切换,那我们需要在修改指向关系的一小时前把这个域名的缓存时间改成1min或者30s,那么一小时后可保证等所有用户的缓存时间都过了再做域名指向关系的修改,那就能达到快速切换的效果。


2.外网环境:前文有提到,用户在请求DD公司域名前,是经过了运营商的,那其实DD公司的缓存是下发给运营商的,实际用户的缓存时间可能是由运营商下发的,那就会存在一个问题,我改了缓存时间为30s,但运营商那边做了操作,下发给用户是1h(可能是部分地区运营商统一修改的缓存时间,可以设定上时间的下限),那这咋整?那就莫得办法了,但能保证的是九成以上的地区能够在短时间内切换,要想做到所有用户终端秒级切换是不大可能了

3.其他情况:像外网环境那样中间经过了运营商,其实就是相当于经过了一个中间节点一样,这个中间节点帮我们去做请求转发或者是递归查询,那其实内网环境也存在这么一种情况,当清除了本地缓存解析还没生效,那就要考虑下是否你的DNS SERVER是权威服务器还是中间节点了,比如图中内网也存在隔离环境DMZ区域,部分域名权威解析不一定在DMZ区域的服务器上做的,那这些域名就需要做一个转发规则到这个域名的权威服务器上要解析,而这个解析就可能存在于DMZ区域的DNS服务器上了,那怎么看呢?


拿我的windows来举例,打开CMD,解析百度

server address是 192.168.3.1 ,那这明显是经过了中间节点了(是我的网关,路由器地址),下面还告诉你了非权威应答,说明是路由器帮我们去递归请求解析了。

4.怎么清除本地缓存呢?

WINDOWS
可以这样看缓存ipconfig /displaydns
也可以清缓存 ipconfig /flushdns

LINUX服务器如果没有安装DNS服务的话一般是没有缓存的,你的缓存可能来存在于其他程序或者是中间节点,中间节点地址可以通过nslookup随便一个域名看到,就是你的DNS SERVER,登上去清除一下(例 BIND服务器可通过 rndc -s 127.0.0.1 flush 清除,其他视情况自行解决~~)。

5.既然请求解析的第一步是查本地host,那我们是否可以自己修改本地缓存呢?完全阔以

WINDOWS
路径 C:\Windows\System32\drivers\etc

比如我加两个映射关系

www.dd.com 1.1.1.1
baidu.com 1.1.1.1


ping测试

说明本地host是优先的,但是nslookup的结果还是baidu.com的地址,我怀疑是nslookup这个程序直接跳过了查询本地host这一步。

LINUX
和windows一样直接修改就行了

[root@sword ~]# cat /etc/hosts
1.1.1.1 www.dd.com
1.1.1.1 baidu.com

DNS SERVER也是可以自己修改的,还有很多配置就先不写了,看啥时候有空吧~

版权声明:本文为CSDN博主「没事重启一下」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:点击跳转原文链接

简单的解释下什么是CNAME的更多相关文章

  1. SQL Server SQL性能优化之--数据库在“简单”参数化模式下,自动参数化SQL带来的问题

    数据库参数化的模式 数据库的参数化有两种方式,简单(simple)和强制(forced),默认的参数化默认是“简单”,简单模式下,如果每次发过来的SQL,除非完全一样,否则就重编译它(特殊情况会自动参 ...

  2. 浅析SqlServer简单参数化模式下对sql语句自动参数化处理以及执行计划重用

    我们知道,SqlServer执行sql语句的时候,有一步是对sql进行编译以生成执行计划, 在生成执行计划之前会去缓存中查找执行计划 如果执行计划缓存中有对应的执行计划缓存,那么SqlServer就会 ...

  3. javascript简单的认识下return语句+2015的总结+2016的展望

    好久没更新博客了...自从有了mac之后世界变得简单了...日常么,除了研究代码,看别人的代码,写自己的代码.就那样.... 吐槽点:window配个nodejs的环境花了九头牛两只老虎的力气,mac ...

  4. 基于modelsim-SE的简单仿真流程—下

    基于modelsim-SE的简单仿真流程—下 编译 在 WorkSpace 窗口的 counter_tst.v上点击右键,如果选择Compile selected 则编译选中的文件,Compile A ...

  5. PHP中的&传值引用的问题,在foreach循环的结果能帮解释下输出的结果原理是什么?

    PHP中的&传值引用的问题,在foreach循环的结果能帮解释下输出的结果原理是什么? 代码如下: <?php $arr = array('one','two','three'); fo ...

  6. 简单实用的下拉菜单(CSS+jquery)

    原文 简单实用的下拉菜单(CSS+jquery) 没什么可以说的,直接上例子 html+jquery代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTM ...

  7. 简单实现TCP下的大文件高效传输

    简单实现TCP下的大文件高效传输 在TCP下进行大文件传输不象小文件那样直接打包个BUFFER发送出去,因为文件比较大所以不可能把文件读到一个BUFFER发送出去.主要有些文件的大小可能是1G,2G或 ...

  8. oracle中number类型最简单明了解释

    NUMBER (p,s) p和s范围: p 1-38 s -84-127 number(p,s),s大于0,表示有效位最大为p,小数位最多为s,小数点右边s位置开始四舍五入,若s>p,小数点右侧 ...

  9. sql server 备份与恢复系列三 简单恢复模式下的备份与还原

    一.概述 前面讲了备份的一些理论知识,这篇开始讲在简单恢复模式下的备份与还原.在简单模式下是不能做日志备份的,发生灾难后,数据库最后一次备份之后做的数据修改将是全部丢失的,所以在生产环境下,数据又很重 ...

  10. oracle中number数据类型简单明了解释

    NUMBER (p,s) p和s范围: p 1-38 s -84-127 number(p,s),s大于0,表示有效位最大为p,小数位最多为s,小数点右边s位置开始四舍五入,若s>p,小数点右侧 ...

随机推荐

  1. 一文了解EPaxos核心协议流程

    简介: EPaxos(Egalitarian Paxos)作为工业界备受瞩目的下一代分布式一致性算法,具有广阔的应用前景.但纵观业内,至今仍未出现一个EPaxos的工程实现,甚至都没看到一篇能把EPa ...

  2. Cloudera Manager 术语和架构

    ​简介: 本文介绍了Cloudera Manager 的常见术语和架构 Cloudera Manager 术语 为了有效地使用Cloudera Manager,您应该首先了解其术语. 术语之间的关系如 ...

  3. github 解决推拉代码提示 REMOTE HOST IDENTIFICATION HAS CHANGED 失败

    本文记录最近 github 推送或拉取代码时提示 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! 而失败的解决方法 报错提示如下 @@@@@@@@@@ ...

  4. Taurus.MVC 微服务框架 入门开发教程:项目集成:7、微服务间的调用方式(调整):引用程序集及代码下载(新增)

    前言: 今天补充一下 Taurus.MVC 微服务教程,介绍一下微服务中针对RPC方面调整或新增的功能. 之前系列文章目录: Taurus.MVC 微服务框架 入门开发教程:项目集成:1.服务端:注册 ...

  5. Django之ORM操作Mysql

    一.单表操作 # 单表查询操作基本方法 class BookList(models.Model): title = models.CharField(max_length=32) price = mo ...

  6. vue下获得经纬度省市区

    1.根目录html文件引入 <!--引入百度 API,"ak=" 后面一串码是密钥,最好自己申请--> <script type="text/javas ...

  7. 一篇教程搞定Windows系统中的Docker应用安装

    目录 1. 引言 2. "Docker -> WSL -> Windows"的依赖逻辑 3. 安装方法 3.1 安装WSL 3.2 安装Docker Desktop 4 ...

  8. 2020年9月至10月 Splashtop 新功能

    ​ Splashtop 已为 Splashtop Business Access.Splashtop Remote Support.Splashtop SOS 和 Splashtop On-Prem ...

  9. C 语言中的 sscanf 详解

    一.函数介绍 函数原型:int sscanf(const char *str, const char *format, ...); 返 回 值:成功返回匹配成功的模式个数,失败返回 -1. RETUR ...

  10. java的synchronized有几种加锁方式

    在Java中,synchronized关键字提供了内置的支持来实现同步访问共享资源,以避免并发问题.synchronized主要有三种加锁方式: 1.同步实例方法 当一个实例方法被声明为synchro ...