CDN内容分发网络

一、CDN的介绍

CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。用户就近获取内容,降低网络堵塞,提高用户访问响应速度和命中率。

在这里插入图片描述

CDN的工作原理:
假设通过CDN加速的域名为www.a.com,接入CDN网络,当终端用户发起HTTP请求时,处理流程如下:
1、当终端用户向www.a.com下的指定资源发起请求时,首先向LDNS(本地DNS)发起域名解析请求;
2、LDNS检查缓存中是否有www.a.com的IP地址记录。如果有,则直接返回给终端用户;如果没有,则向授权DNS查询。
3、当授权DNS解析www.a.com时,返回域名CNAME www.a.tbcdn.com对应IP地址。域名解析请求发送至阿里云DNS调度系统,并为请求分配最佳节点IP地址。
4、LDNS获取DNS返回的解析IP地址。用户获取解析IP地址。用户向获取的IP地址发起对该资源的访问请求。如果该IP地址对应的节点已缓存该资源,则会将数据直接返回给用户,请求结束。
5、如果该IP地址对应的节点未缓存该资源,则节点向源站发起对该资源的请求。获取资源后,结合用户自定义配置的缓存策略,将资源缓存至节点。
(1)CDN的加速资源是跟域名绑定的;
(2)通过域名访问资源,首先是通过DNS分查找离用户最近的CDN节点(边缘服务器)的IP;
(3)通过IP访问实际资源时,如果CDN上并没有缓存资源,则会到源站请求资源,并缓存到CDN节点上,这样,用户下一次访问时,该CDN节点就会有对应资源的缓存了。

二、CDN的部署

1.varnish的配置

停止之前的部署的pacemaker以及集群服务,以免影响实验
请添加图片描述
请添加图片描述
实验环境:
server1作为CDN服务器,server2、server3作为后端接收负载均衡的真正主机。
安装varnish安装包及相关依赖包,Varnish作用是访问web速度的web加速器,被安装在web服务器之前,从而缓存web服务器的应用程序和数据,最后响应客户的请求。
请添加图片描述
请添加图片描述
修改配置文件varnish.params,设定监听端口为80
请添加图片描述
通过查看varnish服务,可以看到varnish.service文件的存放路径
请添加图片描述
限制了所能打开的最大文件数量
请添加图片描述
显示系统关于文件的相关参数
请添加图片描述
修改/etc/security/limits.conf文件,设定varnish服可以修改的内核文件数
请添加图片描述
修改varnish服务配置文件default.vcl
请添加图片描述
设定server2为后端服务器,使用的端口是httpd服务的80端口;
请添加图片描述
同时server2打开httpd服务
请添加图片描述
启动服务
请添加图片描述
在真机上访问一下server1,可以看到server2 Apache发布页面的内容
在这里插入图片描述

2.显示缓存是否命中

当我们查看163发布页面的详细信息时,会看到缓存命中信息
请添加图片描述
因此我们也可以修改配置文件: /etc/varnish/default.vcl,加入如下语句块;
如果命中已有缓存,显示HIT from westos cache,否则显示MISS from westos cache。
请添加图片描述
因此当真机第一次访问server1时,会显示MISS,第二次之后,由于已经得到了缓存信息,因此再次访问就是HIT。
请添加图片描述

3.根据相应域名进行服务分发

开启server3的httpd服务
请添加图片描述
着在server1上修改配置文件;
设定当访问域名为www.westos.org/westos.org ,则由web1(server2)提供服务;当访问域名为bbs.westos.org,则由web2(server3)提供服务;其余返回404。
return (pass)参数表示:不保留缓存信息
请添加图片描述
修改完毕后,reload重新加载服务的配置文件
请添加图片描述
之后在真机加上相应的域名解析
请添加图片描述
为了便于测试,修改server2、server3的默认发布页面
请添加图片描述
请添加图片描述
真机(客户端)测试结果如下
请添加图片描述
请添加图片描述
访问错误域名显示404
请添加图片描述

三、CDN健康检查

再打开一台虚拟机server4,安装httpd服务
请添加图片描述
修改默认发布页面
请添加图片描述
接着在server1上继续修改配置文件;
设定表示:
当访问域名为www.westos.org/westos.org时,由web_cluster模块中的web1(server2)和 web3(server4)提供服务,调度方式为rr轮叫;
当访问域名为bbs.westos.org时,由web2(server3提供服务);
其余返回404no cache。
并打开return(pass)参数
请添加图片描述
每次修改文件之后,记得重启服务 systemctl reload varnish.service;
测试效果可以看到web1和web3论叫
请添加图片描述
停止server4的服务
请添加图片描述
再一次在真机测试发现如下:server4会显示503报错,这说明CDN没有健康监测(否则如果后端服务器坏了就不会给他发请求了)。这在实际生产中是不允许的,因为客户端不可以访问到错误的页面
请添加图片描述
为了实现健康检测,继续修改server1的配置文件,注意安全监测的代码必须写在语句块最前面,不然会报错(因为需要先引入安全监测的模块,才能进行检测),每个服务下也要添加健康检测模块调用
请添加图片描述
再一次测试,发现只有server2在提供服务
请添加图片描述
恢复server4的服务,并再次测试,又恢复负载均衡
请添加图片描述
请添加图片描述

四、CDN结合nginx进行调度

在生产环境中有时候会有这样的需求:服务器可能需要根据访问量等信息做业务分析,这时候就需要获取到客户端的ip,但是正常情况下客户端访问到服务器会经过两次反向代理 ->cdn 和proxy,这时候如果不做设置,则原站获取到的都是离自己最近一级的proxy的ip,因此无法满足业务需求。
通过CDN结合nginx进行调度,现在访问路径为:客户端->cdn->nginx->真正服务器
将server4的httpd服务停止,因为需要下载nginx服务,进行nginx的调度
请添加图片描述
请添加图片描述
真机将nginx的压缩包传给server4后,server4进行解压
请添加图片描述
执行以下操作:编译,安装
在这里插入图片描述
源码编译
请添加图片描述
安装所需的软件
请添加图片描述
完成编译
请添加图片描述
请添加图片描述
请添加图片描述
设定软连接
请添加图片描述
语法检测
请添加图片描述
修改nginx的配置文件,完成负载均衡的调度;
即客户端访问CDN,然后CDN到nginx端去实现负载均衡!
请添加图片描述
编辑nginx配置文件/usr/local/nginx/conf/nginx.conf
请添加图片描述
设定监听端口为80;
在nginx中配置proxy_pass代理转发,反向代理proxy_pass的语法结构为proxy_pass URL,其中,URL为要设置的被代理服务器的地址,如果被代理服务器是一组服务器的话,可以使用upstream指令配置后端服务器组(上图);
此模块表示:如果客户端请求www.westos.org,请求被该location块处理,将转向地址http://westos,即由代理服务器server2和server3提供服务。(反向代理是作用在服务器端的,对于用户的一个请求,会转发到多个后端处理器中的一台来处理该具体请求。)
请添加图片描述
然后启动nginx服务:nginx;
查看端口:80开启
请添加图片描述
请添加图片描述
然后再server1修改varnish配置文件 /etc/varnish/default.vcl
为了避免影响,注释掉varnish配置文件中的负载均衡模块,健康监测模块。
请添加图片描述
设定表明,当客户端访问域名为www.westos.org/westos.org ,则由server4提供服务,此时server4上部署了nginx服务,它将会把用户的请求转发到server2和server3去处理
请添加图片描述
重启服务 systemctl reload varnish.service
真机进行测试:发现在server2和server3上实现负载均衡
请添加图片描述
在server2或者server3上查看日志,可以看到虽然是通过客户端172.25.36.250来访问的,但是日志却显示访问来自CDN调度器172.25.36.1
请添加图片描述
请添加图片描述
那么如何找到真正的客户端原始的ip呢?我们需要在server3上也安装nginx
请添加图片描述
执行以下操作
请添加图片描述
请添加图片描述
请添加图片描述
在server4上的nginx配置文件修改一下:注释掉调度器server2
请添加图片描述
停止server3的httpd服务,重启nginx服务(否则会端口冲突)
请添加图片描述
请添加图片描述
客户端curl测试之后,在server3上查看日志,但IP是调度器nginx所在server4的IP
请添加图片描述
在server4上修改nginx的配置文件,为发往后端主机的请求添加X-Forward-For首部;real_ip_header 是指从接收到报文的哪个http首部去获取前代理传送的用户ip;
real_ip_recursive 是否递归地排除172.25.36.0网段的ip,由于测试的虚拟机都是同一个网段的,所以就一直往前排除,直到最后一个客户端停止了。(原理:客户端把请求发给cdn;cdn把客户端的ip保留为表头(x-forwarded-for),然后加上自己的ip打包发给nginx;nginx继续加上自己的ip打包发给服务器;服务器依次揭开就可以获得原始客户端ip)
请添加图片描述
重启服务
请添加图片描述
客户端再次curl访问www.wesos.org
请添加图片描述
在server3上查看日志,此时得到了客户端的真实IP
请添加图片描述
同理,如果把set_real_ip_from 后面写为172.25.36.4
请添加图片描述
请添加图片描述
此时就可以得到CDN服务器的ip
请添加图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值