相关动态
CDN基础知识
2024-12-31 16:03

一、CDN简介

内容分发网络CDN(Content Delivery Network)将源站内容分发至遍布全国的加速节点,缩短用户查看内容的延迟,提高用户访问网站的响应速度与网站的可用性,解决网络带宽小、用户访问量大、网点分布不均等问题。

CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。

1、百度云CDN加速原理

如上图所示,CDN加速详细步骤如下

1.网站用户查询 my.com 的地址

2.请求权威DNS

3.返回配置的CNAME: my.com.a.bdydns.com

4.请求my.com.a.bdydns.com对应的IP

5.根据智能调度返回离用户最近的接入点IP

6.LocalDNS返回my.com的IP地址并缓存

7.向CDN节点发起HTTP/HTTPS请求,访问my.com的内容

8.CDN 通过百度云加速链路,将请求转发至多线中心节点

9.中心节点向源站发起回源请求

10.源站向中心节点返回响应

11、12.中心节点、边缘节点将响应返回用户,并缓存响应内容

2、用户是如何接入CDN节点的

1)通过控制台接入

2)通过open-api接入

opendn-api提供和控制台几乎相同的功能,用户使用自己的ak、sk,调用api进行域名创建、配置管理的操作。

二、 调度系统

从一个domain请求访问开始,到获得相关服务节点IP为止。dns调度、302调度,业务调度,opencdn调度。

2.1. dns调度

由jomo dns服务器直接解析出节点IP地址。

2.2 302调度

302中心将http请求的url进行封装,将请求302到服务节点

DNS调度和302调度的优劣及使用场景

2.3 httpDNS调度

2.4 openCDN 调度

三、CDN节点结构

每个CDN节点一般都会从运营商那里分一个公网的C段,如SHUN为112.65.203.0/24,总共有254个可用的公网IP。

a. BGW

在流量入口处一般会部署5、6、10、14个BGW,其个数不固定,其公网IP段一般从112.65.203.(10~23,作为管理口使用; 内网IP段为172.18.x.254,其中x段是bgw与后端jorcol机健康检查网段

每台jorcol机上会有策略路由来保证对应bgw上的请求回到这个BGW

b. Relay机

控制机Relay一般会部署四台,IP段为112.65.203.(4~7)

Relay机主要是进行控制命令的下发,日志的回传等功能。目前很多功能都是在4、6两台上启用,5、7做为冷备。

c. Jorcol机

Jorcol机由于需要回源,所以都会分配公网IP,其一般为112.65.203.(50~149)|(150~249),一般有一组或两组,分别为100个节点。

每台jorcol机上混布 Nginx + Cache(Olivehc)的结构

d. VIP

最后给业务使用的VIP一般在30~49,现在OpenCDN业务使用了35,即VIP为112.65.203.35,其BGW上对应的80与443分别与jorcol机的7015与7023对应,通过BGW实现LB。

四、配置参数说明

所有的配置都会在jnx/lua/com/parser.lua中解析,因此在parse.lua中可以看到现在所有支持的配置情况,下面是一些重要的配置和它们的介绍(按照解析顺序

1、referer相关

referers

referer白名单

"referers":[".yyy.com",".xxx.com"]

referersBlackList

referer黑名单

"referersBlackList":["*.xxy.com","xyyx.com"]

emptyRefererEnabled

是否允许空referer

"emptyRefererEnabled":"ON"

regexRefererEnabled

是否允许正则referer

"regexRefererEnabled":"OFF"

如果referer中携带了协议,那么协议必须要同时匹配才算匹配。如果未开启正则,那么支持匹配,但是只支持最前面和最后面的,例如 .baidu.com,实时上就是去掉两头的进行字符串查找,中间的无法匹配。

2、IP黑白名单

ipWhiteList

客户端IP白名单

"ipWhiteList":["1.1.1.1","3.3.3.3","1.1.1.0/24","2.2.2.0/24"]

ipBlackList

客户端IP黑名单

"ipBlackList":["2.2.2.2","4.4.4.4","2.2.2.0/24","4.4.4.0/24"]

同时支持IP和NET(网段,根据IP和网段进行过滤。

3、cacheTtl

cacheTtl

缓存规则

"cacheTtl": [

 
 

]

节点上配置会根据权重进行排序,权重高的在前,匹配时会使用第一条匹配到的规则,因此高权重的更容易匹配到。

源站优先时传给cache的头为ohc-max-age-default,否则为ohc-max-age。支持正则匹配和指定是否携带query_string(对路径设置带url缓存)。

4、waf

wafEnabled

waf放攻击策略

"wafEnabled":"ON"

5、302 防攻击

sourceGuardEnabled

302放攻击

"sourceGuardEnabled":"OFF"

源站响应5XX过多时认为是攻击,当判断为攻击时,给用户发送302,url中携带baidu-cdnid-redirect=cdnid_encode,如果用户携带此code follow302,则说明为正常请求,否则返回403。

7、isBan

isBan

封禁某一个域名

"isBan": "NO"

如果isBan为yes,节点直接返回403。

8、originVerifyEnabled cache follow源站302

originVerifyEnabled

cache是否follow源站的302

"originVerifyEnabled":"OFF"

通过Ohc-Origin-Verify-Disable:on或者off,来判断是否需要cache follow302。

9、视频相关配置

flv

flv视频相关配置

"flv": {

 
 

mp4

mp4视频相关配置

"mp4": {

 
 

视频拖动设置,通过在url参数中携带start、end参数来进行视频拖动,mp4的start end是秒数,flv的start end是字节。

注意,如果要配置视频拖动,需要首先配置后缀为flv和mp4格式的视频内容的缓存,否则将无法进行拖动(这个问题cache正在修复开发,预计很快可以上线)。

10、keyIncludeQuery带参数缓存

keyIncludeQuery

是否带参数缓存

"keyIncludeQuery":"ON"

通过Ohc-KeyIncludeQuery-Whitelist:*来开启cache的带参数缓存,如果不配置,默认是带参数缓存。

11、designateHostToOrigin

designateHostToOrigin

自定义回源host

"designateHostToOrigin": "xxxxxx.com"

通过ohc-upstream-host来开启cache自定义回源的host。目前内部节点之间还是使用加速域名(如果使用自定义host会403

12、acceptRangesNone

acceptRangesNone

指定是否通过last-modified和etag校验

"acceptRangesNone":"ON"

on的时候强制不使用分片回源。

13、bos_key

bos_key

bos_key防盗链

"bos_key" : "******"

用户配置bos_key,根据url中的expires和bos_key计算密钥(sha256,当密钥和url中携带的token值相等时请求,否则返回403。

14、secretKey,antiHotlinkType

secretKey

防盗链加密密钥

"secretKey":"xxxxxxxxx"

antiHotlinkType

防盗链加密类型

"antiHotlinkType":""

通过防盗链加密类型,选择加密算法,使用加密密钥进行加密,例如打antiHotlinkType为tieba时,使用的a类防盗链。目前antiHotlinkType基本都是用户定制的防盗链,可以进行扩展和添加。

以tieba防盗链为例,防盗链计算方法如下:首先比对now与timestamp,然后计算ngx.md5(ngx.var.uri-timestamp -rand-uid-sercureID)与url中所带的md5hash值做对比。

15、wildDomainEnabled,shareCacheEnabled

wildDomainEnabled

泛域名

"wildDomainEnabled":"ON"

shareCacheEnabled

共享缓存

"shareCacheEnabled":"ON"

泛域名开启共享缓存,修改ohc-key,使用匹配的泛域名作为cache缓存的key

16、httpsEnabled

httpsEnabled

开启https服务

"httpsEnabled":"ON

开启https服务,边缘节点使用https。如果未开启此选项并且使用了https,会产生500错误。

17、httpToHttpsEnabled

httpToHttpsEnabled

302跳转到https

"httpToHttpsEnabled":"ON"

用户使用http访问,会302跳转到https访问。

18、originProtocol

originProtocol

回源协议

"originProtocol":"https"

选择回源协议,默认为http协议。会传给cache两个头"Use-Https", "yes""Ohc-SSL-Version", orig_ssl_ver。会传递ssl版本,指定cache使用用户指定ssl版本回源。

19、sslVersion

sslVersion

选择ssl版本

"sslVersion":"TLSV1"

用户自定义回源ssl版本,共有四个版本可选:SSLV3(1,TLSV1(2,TLSV11(3,TLSV12(4)。默认TLSV1

20、disableHttpsSpider

disableHttpsSpider

根据用户设置UA实现http到https跳转

"disableHttpsSpider": "xxxxxx"

禁止某些ua对于http到https的跳转

21、needModifyHeader、modifyHeaderMap

needModifyHeader

是否更改到用户端的相应头

"needModifyHeader" : " * "

modifyHeaderMap

响应头的具体内容和更改方式

"modifyHeaderMap": [

 
 

用于修改到用户端的响应头,支持正则匹配。共有update,add,delete三种action。只有needModifyHeader为*时才会进行更改。

22、antiAttack

antiAttack

对IP地址进行访问限制

"antiAttack":[{"limit":2,"duration":10,"block":20,"ip":["220.220.0.0/24","10.94.43.58"],"path":"/index/a"}]

限制用户在一定时间之内对于CDN节点的访问。如果超出访问限制,则返回503。使用ngx.var.remote_addr .. path .. math.floor(ngx.time() / duration)作为key来进行共享内存查找。

主要有下面几个配置项

limit:指定时间范围内的请求次数限制

duration:时间范围,单位秒

block:超出请求次数限制后封禁的时长,单位秒

ip:Ip段列表,支持CIDR格式表示的IP段,不设置则对所有客户端生效

path:访问路径,不设置则对所有路径生效,根据uri进行最长前缀匹配

23、urlRedirect

urlRedirect

支持根据ua进行url重定向

"urlRedirect":[

 
 

"regex" : true //可选

 
 

]

根据ua进行url的重定向,先匹配ua,当ua匹配时,如果url匹配from,那么使用to中的url进行重定向(返回302响应,只在边缘节点生效)。

如果配置了regex,那么将使用to中的内容,替换匹配到的from中的内容然后进行重定向。

例如:针对移动终端访问官网http://www.drivergenius.com跳转到移动版本的网页 http://www.drivergenius.com/default_m.asp

24、originRequest

originRequest

回源时需要添加的头部信息

"originRequest": { //回源时需要添加(修改)域删除某些header

 
 

在rewrite阶段进行处理,修改传给源站的请求头。addHeadersDynamic通过嵌入一小段lua代码来设定请求头。inheritHeaders通过设定是否仅在二级三级节点生效。默认只在边缘节点生效。

25、clientResponse

clientResponse

添加删除用户响应header

"clientResponse":{ //用户请求响应时,添加或删除某此header

 
 

添加删除给用户的响应中的header,可以认为是needModifyHeader的简化版,不支持正则表达式。

26、cache

cache

根据不同的参数筛选回源地址

"cache":{

 
 

keyIncludeHeaders,指定参与计算key的头。mapOrigin,根据不同的目录,header,args指定不同的回源地址。

当path有相同的前缀时,越精确的匹配优先级越高,例如/a/b和/a/b/c同时进行配置,以/a/b/c的配置为准。

path的优先级高于header,args的优先级。另外对于header和args,只要参数key匹配就可以,不需要值一起匹配。此处会关闭cache的长连接:Ohc-Upstream-Keepalive-Timeout:0。cache会通过host作为key计算长连接的fd,如果开启长连接,没法实时根据mapOrigin来更换源站地址。

27、forbiddenUA

forbiddenUA

禁止某些ua的访问

"forbiddenUA":"chrome"

对ua进行模糊匹配,如果能匹配上,直接给出403。ua限制为最小5个字符(api限制)。

28、antiHotlink

antiHotlink

防盗链类型,配合secretKey使用,nginx通过该字段判断采用哪种校验规则

"antiHotlink":{

 
 

A类防盗链:url中auth_key=timestamp-rand-uid-md5hash,其中使用md5hash与md5( uri-timestamp-rand-uid-secret_key)进行比较,相等则通过,否则403.

B类防盗链:匹配url中的[[/(d{12})/(w{32})/]],其中12个数字为timestamp,32个字符为md5hash的值,使用new_secret_key .. tostring(timestamp) .. newuri计算md5值(其中newurl为去除匹配字符串之后的url,相等则通过,否则给出403。

C类防盗链:优先根据sign_arg_key和time_arg_key从url参数中获取md5hash值和时间戳信息,如果不存在,则从url中截取/32为字符/md5hash/timehex,使用new_secret_key .. newuri .. timehex计算md5值,其中,newuri是去除url匹配字符之后的新的uri。

29、httpsOnlyEnabled

httpsOnlyEnabled

只允许https请求

"httpsOnlyEnabled":"ON"

开启此选项,使用http访问给出403

30、shareCacheById

shareCacheById

设置与目的域名共享缓存,目的域名也需要这个配置

"shareCacheById":"keyid"

不同的域名,使用一个key来进行共享缓存。cache计算key时会忽略host,使用keyid作为算key的依据。

31、keyExcludeQuery

keyExcludeQuery

指定去参数缓存

"keyExcludeQuery":["^/ids/js/passport.js?"]

当匹配某些规则时,去参数缓存(比keyincludequery优先级高,当为空字符串时匹配所有url。

五、常见查问题的工具

1、查看节点用户配置

1.1 curl 127.1:7015/baidu-cdn-opencdn-detail | grep zpw.sys-qa.com

1.2.1 查看域名配置信息信息

http://opencdn.baidu.com/domain ####可以查询域名---源站信息——用户id

1.2.2 CDN节点信息+域名状态信息

http://cdn.baidu.com/oss/index.php?r=tools/jomoCha/index

2、节点查看日志

日志查询步骤

1.登录relay01机

2.ssh infwork@tc-sys-cdn-oc01.tc.baidu.com 密码:XXXXXX

3.根据web查看状态码是哪个节点返回的 同时查看下web上服务器的硬件状态

4.go 节点 (eg:go zzcm4 ###登录的是relay机可以机器名)

  1. r jorcol-number (eg:r 100)

6.根据状态码初步判断是哪个服务的问题查看日志(eg:503可能是nginx

查看日志命令(在relay机进行执行)eg:go zzcm4 ###登录zzcm节点上的relay4机器

错误码查询

1.nginx日志查询

logstats.py nginx.access.opencdn_perf -t 2017051013 -m "grep pic1cdn.cmbchina.com" | awk -F ' ' '$7==503'

2.查看olivehc日志

logstats.py olivehc.access.opencdn -m "grep pic1cdn.cmbchina.com" -t 2017051013

3.waf--403错误

有些403错误是触发waf造成的,nginx和olivehc都查不到错误信息的,需要查询

nginx.waf.opencdn

4.https加速查询

nginx.access.https_opencdn

olivehc.access.https_opencdn

5.统计客户端请求数

logstats.py nginx.access.opencdn_perf -t 2017051012 -m "grep cmbchina.com" |awk -F ' ' '$7==200'|awk '{print $1}' |awk '{a[$1]+=1;}END{for(i in a){print a[i]" "i;}}'|sort -nk1

3、节点抓包

例如,抓去回源时的请求

/usr/sbin/tcpdump -i any dst host opencdn.origin.jomodns.com -w zpw.cap

在cap文件中查找相应的域名即可。

问题及答复

域名被攻击该怎么办 如果CDN节点遇到DDOS类的攻击,会有几种情况

1) 如果负载集中在一个边缘节点上,那么GSLB不会将其上的负载转移到其他地方去,由这一个节点承受攻击。

2) 如果负载分布在多个节点上,GSLB会启动负载均衡功能,有几个节点共同承载的方式化解攻击。

3) 如果负载已经压满整个区域的节点,则CDN不再提供服务。

2.CDN的优势

CDN将源站内容分发至遍布全国的加速节点,缩短用户查看内容的延迟,提高用户访问网站的响应速度与网站的可用性,解决网络带宽小、用户访问量大、网点分布不均等问题。

CDN本质上是依赖于一组代理服务器来提供高可用和高性能服务的网络架构。

3.http的各种状态码的意义

总结一下状态码的含义

2XX 表示成功

3XX 表示重定向

4XX 表示客户端错误

 
 

5XX 表示服务端错误

 
 

503 Service UnavailableThe server is currently unavailable (because it is overloaded or down for maintenance). Generally, this is a temporary state.

具体状态码信息可以参考以下链接

https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_Client_errors

4.用公共DNS会造成调度问题吗

这个问题还是不太明白

5.接入cdn域名如何解析

    以上就是本篇文章【CDN基础知识】的全部内容了,欢迎阅览 ! 文章地址:http://ww.kub2b.com/news/17256.html
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 企库往资讯移动站 http://ww.kub2b.com/mobile/ , 查看更多   
最新文章
智能家居“伪智能”、直播间买到的羽绒服穿不了……江苏一季度消费投诉热点出炉
4月9日,江苏省消费者权益保护委员会发布2025年一季度消费投诉及舆情热点报告。一季度全省消保委系统受理投诉51464件,接待消费
智能手机传感器及作用大盘点手机的作用「智能手机传感器及作用大盘点」
已经成为不可思议的小机器,几十年前,这样的设备只存在于科幻小说。如果回到几十年前,人们可能会认为是魔法。现在已经成为最普
您知道唐僧师徒在南通长牌中分别是谁吗?
《西游记》中,猪八戒与孙悟空对峙打斗时,曾经这样说“放生遭贬出天关,福陵山下图家业。我因有罪错投胎,俗名唤做猪刚鬣”,这
【华为】新版模拟器eNSP Lite安装攻略提前解锁华为手机模拟器「【华为】新版模拟器eNSP Lite安装攻略提前解锁」
新版模拟器eNSP Lite资源下载:华为新版模拟器eNSPLite镜像资源资源-CSDN文库    最近华为发布了新版模拟器eNSP Lite
Android监控虚拟键 android手机虚拟摄像头手机IM「Android监控虚拟键 android手机虚拟摄像头」
在工作中,camera这一块上,可能会有各种各样的需求。比如有人想新增一个虚拟摄像头,当用户app打开摄像头设备时,打开的不是系
微信语音怎么提取到电脑【苹果安卓手机】苹果手机备份到电脑「微信语音怎么提取到电脑【苹果安卓手机】」
微信语音中可能保存着一些温馨记忆,如年迈父母发给自己的语音消息,微信语音中也可能保存着知识技能,如培训老师发给自己的各种
修成正果!安东尼已被通知入选2025年奈史密斯篮球名人堂
北京时间4月3日讯 据Shams Charania报道,十次入选NBA全明星的卡梅隆·安东尼已获通知,他被选入2025年奈史密斯篮球名人堂。曾六
在任意手机上使用带有图形化界面(GUI)的完整Linuxlinux手机「在任意手机上使用带有图形化界面(GUI)的完整Linux」
不过,在我们今天的任务中只有运行者两者。这篇教程不会讲述任何运行后的自定义使用。不同于之前的两次尝试——安装Window
腾讯史上最大就业计划技术岗超六成,大厂加码AI人才校招
4月17日,腾讯宣布启动史上最大就业计划,三年内将新增28000个实习岗位并加大转化录用,仅2025年将迎来10000名校招实习生。在大
纪律处罚消息两则:海港主教练穆斯卡特停赛1场罚款1万 & 广东男篮外援莫兰德罚款3万
各CBA俱乐部、赛区:2025年4月8日,2024-2025赛季CBA联赛季后赛12进8阶段场序467,上海久事大鲨鱼俱乐部久事篮球队与广东宏远华