CDN原理

作者: SkTj | 来源:发表于2019-02-17 20:24 被阅读73次

案例:
Web服务器:域名www.abc.com IP:192.168.21.129 电信单线路接入
访问用户:电信宽带用户、移动宽带用户
出现问题:电信用户打开www.abc.com正常,移动用户打开www.abc.com很慢,甚至打不开
解决方案:在移动机房放置一台CDN代理服务器,通过智能DNS解析,让电信用户直接访问Web服务器、让移动用户访问CDN代理服务器,解决移动用户访问Web服务器慢的问题
具体操作:
CDN代理服务器:
系统:CentOS 5.5 主机名:cdn.abc.com IP:192.168.21.160 安装Squid软件,配置反向代理搭建CDN缓存服务器
安装前准备:
1、关闭SELinux
vi /etc/selinux/config

SELINUX=enforcing #注释掉

SELINUXTYPE=targeted #注释掉

SELINUX=disabled #增加
:wq 保存,关闭。
shutdown -r now重启系统

2、开启防火墙80端口(后面配置squid的端口为80)
vi /etc/sysconfig/iptables
添加下面的内容
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
/etc/init.d/iptables restart #重启防火墙使配置生效

3、修改主机的路由模式
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1 #0为关闭,1为开启路由 使用sysctl -p 命令查看
4、修改主机hosts文件,增加域名解析记录
vi /etc/hosts
192.168.21.129 www.abc.com #添加解析记录

===========================================================================
安装开始
1、安装Squid
yum install squid #安装(Squid 2.6)
service squid start #启动
service squid restart #重启
chkconfig squid on #设置开机启动

2、配置Squid
cp /etc/squid/squid.conf /etc/squid/squid.confbak #备份
vi /etc/squid/squid.conf #编辑文件

http_port 80 transparent #设置squid端口,默认为3128,设置为80,客户端打开网站的时候不需要输入端口号

(intercept,transparent) 两种工作模式

cache_mem 1024 MB #分配内存大小

cache_dir ufs /var/spool/squid 4096 16 256 #设置缓存文件大小
cache_effective_user squid #设置用户
cache_effective_group squid #设置用户组
access_log /var/log/squid/access.log #设置访问日志文件
cache_log /var/log/squid/cache.log #设置缓存日志文件
cache_store_log /var/log/squid/store.log #设置缓存记录文件
visible_hostname cdn.abc.com #设置squid服务器主机名
cache_mgr root@abc.com #设置管理员邮箱(设置为自己的邮箱地址)
acl all src 0.0.0.0/0.0.0.0 #设置访问控制列表,默认开启
http_access allow all #设置访问权限,默认注释掉的
cache_peer 192.168.21.129 parent 80 0 no-query originserver name=web #用户访问web时,Squid向192.168.21.129的80端口发送请求
cache_peer_domain web www.abc.com #设置web域名为www.abc.com
cache_peer_access web allow all #设置访问权限,允许所有外部客户端访问web

:wq! #保存退出
service squid stop #停止
/usr/sbin/squid -z #初始化cache缓存目录
service squid start #启动
Squid反向代理服务器安装配置完成
准备:
1、关闭SELinux
vi /etc/selinux/config

SELINUX=enforcing #注释掉

SELINUXTYPE=targeted #注释掉

SELINUX=disabled #增加
:wq 保存,关闭。
shutdown -r now重启系统

2、开启防火墙80端口(后面配置squid的端口为80)
vi /etc/sysconfig/iptables
添加下面的内容
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
/etc/init.d/iptables restart #重启防火墙使配置生效

3、修改主机的路由模式
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1 #0为关闭,1为开启路由 使用sysctl -p 命令查看
系统运维 www.osyunwei.com 温馨提醒:qihang01原创内容?版权所有,转载请注明出处及原文链接

acl allowuser 192.168.1.1/32
cache_peer 192.168.1.50 parent 81 0 no-query originserver weight=1 name=a
cache_peer 192.168.1.50 parent 82 0 no-query originserver weight=1 name=b
cache_peer 192.168.1.50 parent 80 0 no-query originserver weight=1 name=c

cache_peer_domain a www.serverA.com
cache_peer_domain b www.serverB.com
cache_peer_domain c www.serverC.com

以上六行配置表示:

从客户端过来的请求,如果是 www.serverA.com,则Squid向 Server 192.168.1.50的端口81发送请求;

从客户端过来的请求,如果是 www.serverB.com,则Squid向 Server 192.168.1.50的端口82发送请求;

从客户端过来的请求,如果是 www.serverC.com,则Squid向 Server 192.168.1.50的端口80发送请求;

换句话说:设定不同域名转发到不同的cache_peer上,如果没有这项.不同的域名可能被分发到同一台服务

器(或同一台服务器的端口)上.

name=a表示给cache_peer一个别名

cache_peer_access a allow all
cache_peer_access b allow all
cache_peer_access c allow all

设置访问权限,允许所有外部客户端访问 a b c

如果是cache_peer_access a allow allowuser

表示只允许allowuser访问 www.serverA.com

另一个例子:
acl user1 src 192.168.2.68/32
acl user2 src 192.168.2.94/32

定义两个user IP

cache_peer 192.168.2.172 parent 80 0 no-query no-digest originserver name=www1 sourcehash
cache_peer 192.168.2.173 parent 81 0 no-query no-digest originserver name=www2 sourcehash
cache_peer_domain www1 www.domain.com
cache_peer_domain www2 www.domian.com

表明对www.domian.com的请求,squid向192.168.2.172的80端口和192.168.2.173的81端口发出请求

cache_peer_access www1 allow user1
cache_peer_access www2 allow user2

允许user1访问192.168.2.172的80端口

允许user2访问192.168.2.173的81端口

设置子父代理的cache_peer:
如果要设置父级的代理服务器,例如proxy.test.edu.cn那么可以这样配置

在#cache_peer hostname type 3128 3130 之下加入

cache_peer proxy.test.edu.cn parent 3128 3130 no-query no-netdb-exchange

如果要设置同级的代理服务器,如:192.168.1.41 192.168.1.42则可以这样来配置

cache_peer 192.168.1.41 sibling 3128 3130 proxy-only

....

注意目前各单位施行代理服务器分级管理,设置父级代理服务器,还必须取得上层单位的同意

说明:

(1)命令cache_peer的定义格式是:

cache_peer hostname type 3128 3130

hostname 是用来指定获取缓冲的PROXY主机的名字

type 是PROXY主机的类型,有以上PARENT SIBLING两种

3128:HTTP_PORT

3130:ICP_PORT

(2)附加配置选项(注意应为小写,配置时)

NO-QUERY:不做查询操作,直接获取数据

NO-NETDB-EXCHANGE:代理服务器之间不交互信息

NO-DIGEST:代理服务器之间不做摘要表查询,直接用ICP协议沟通(同级代理)

PROXY-ONLY:直接获取对方缓冲,转交给代理服务器的客户端,而不存入本地

ROUND-ROBIN:如果设置数部上层服务器,那么轮流查询父级服务器

LOGIN=USER:PASSWD:要求对方做帐号及密码验证,例如

cache_peer 192.168.1.41 sibling 3128 3130 login=kao:123456

举例:
以下为squid1机器上的配置

icp_port 3130
acl domian dst www.domian.com
acl squid2 src xx.xx.xx.xx
acl squid3 src xx.xx.xx.xx

http_access allow squid2
http_access allow squid3

1.配置 squid2、squid3 为其邻居,当 squid1 在其缓存中没有找到请求的资源时,通过 ICP 查询去其邻居中取得缓存
cache_peer squid2 sibling 80 3130
cache_peer squid3 sibling 80 3130

2.squid1的三个父节点,originserver 参数指明是源服务器,round-robin 参数指明 squid 通过轮询方式将请求分发到其中一台父节点;squid 同时会对这些父节点的健康状态进行检查,如果父节点down了,那么 squid 会从剩余的 origin 服务器中抓取数据。
cache_peer 192.168.1.1 parent 8080 0 no-query originserver round-robin name=www1
cache_peer 192.168.1.2 parent 8080 0 no-query originserver round-robin name=www2
cache_peer 192.168.1.3 parent 8080 0 no-query originserver round-robin name=www3

3.将 www.domian.com 域的请求通过 RR 轮询方式转发到三个父节点中的一个。
cache_peer_domain www1 domian
cache_peer_domain www2 domian
cache_peer_domain www3 domian

4.always_direct会导致所有请求都直接发送到原始服务器。而不会去查询sibling,对于www.domian.com这个域名不需要直接出去,而是要询问sibling。其余的域名,squid依然通过hosts去进行转发
always_direct allow !domain

Cache_peer的理解

  1. cache_peer邻居分为parent(父邻居),sibling(子邻居).parent和sibling的区别在于父邻居能为子cache转发丢失的Cache,而子邻居不可能.

  2. cache_peer通过cache_peer_access和cache_peer_domain来控制邻居的访问.二者的区别在于前者一般需要先定义一个ACL而后者都直接匹配相应的域名就可以了.
    如:
    cache_peer 192.168.0.1 parent 3128 3130
    acl AllowDomain dst www.abc.com
    cache_peer_access AllowDomain 192.168.0.1
    cache_peer_domain 192.168.0.1 parent .xyc.com

  3. cache_peer通过never_direct,always_direct,hierarchy_stoplist等限制对邻居的访问.

  4. squid与邻居cache的通信一般为先为never_direct,always_direct确定怎么样转发(根据相应的标识driect, never_direct标识为direct_no,always_direct标识为direct_yes即直接转发到原始服务器等等 direct_maybe详情见Squid中文权威指南10.10.1),接着Squid根据Squid的设置查看耕邻居的摘要是否命中(根据ICP或 HCTP的请求所发现的),若命中则立即放入转发列表中.这一切也依靠cache_peer_access,cache_peer_domain的.同时 squid检查netdb侦测的RTT是否最优,决定是否选择此邻居转发.

5)子邻居不转发任何命中丢失的请求,而父邻居可以转发,若Squid发现父邻居到原始服务器的RTT(往返时间)小于自已到原始服务器的RTT,将此请求转发给此父邻居.(RTT时间需借助Netdb选项的检测,对于父邻居的选择还有另外一些定义选项如:Weigh=N设置父邻居的权重来给予他更高的优先级)

ICP/HCTP和Cache摘要以及CARP一样,都是判断请求的URI是否在邻居中被命中。ICP是发送URL请求,Squid等待着邻居的回应,网络的延迟也是很大的,而且在姐妹Cache中假命中又显得很突出。No-Query,禁用ICP协议! Cache摘要是在邻居中生成摘要信息,摘要往往把反应在Cache中的信息,邻居下载每个Cache中的摘要,发送URI请求时查看URL是否在某个摘要中。

摘录两个 squid.conf 的主要配置,如下

$vi etc/squid.conf
http_port 8080
cache_peer 10.10.2.53 parent 6666 7 login=username:password default no-query
cache_mem 60 MB
cache_mgr zdysgs@zju.edu.cn
dns_nameservers 10.10.0.21
visible_hostname zdysgs.zju.edu.cn
cache_dir ufs /usr/local/squid/var/cache 500 16 256
http_access allow all
never_direct allow all
error_directory /usr/local/squid/share/errors/Simplify_Chinese
cache_swap_low 80
cache_swap_high 97      

#这两行是设置cache进行替换的闸值。当占用到97%的cache后,cache中的内容将被清空20%

第二个是网上找来的,比较简略,一目了然, 如下

一. Squid二级代理

在10.2.1.213上/usr/local/squid安装了 squid-2.5.STABLE7 
将此squid配置成二级代理,上级代理IP:10.1.1.12,端口 3128 
修改squid.conf使之包含类似如下内容: 
cache_peer 10.1.1.12 parent 3128 0 no-query ###定义父代理10.1.1.12,端口3128 
acl all src 0.0.0.0/0.0.0.0 ###acl控制列表 
http_access allow all 
never_direct allow all ###所有请求转发至上级代理 
运行squid: # /usr/local/squid/squid -D 

相关文章

  • CDN

    什么是CDN 为什么使用CDN CDN 的工作原理 CDN的网络架构 CDN的技术手段 应用

  • 面试

    一、js基础 1.cdn原理 CDN 的工作原理就是将源站资源缓存到位于全球各地的 CDN 节点上,用户请求资源时...

  • 一文搞懂CDN加速原理

    一文搞懂CDN加速原理 一、什么是 CDN CDN的全称是(Content Delivery Network),即...

  • 阿里云服务器的CDN配置

    CDN工作原理 CDN的工作原理就是将您源站的资源缓存到位于全国各地的CDN节点上,用户请求资源时,就近返回节点上...

  • CDN | CDN加速原理

    假设我的www.wechoz.com[http://www.wechoz.com]域名接入了CDN,现在想获取该域...

  • CDN原理

    https://zhidao.baidu.com/question/459950825820330605.html

  • CDN原理

    案例:Web服务器:域名www.abc.com IP:192.168.21.129 电信单线路接入访问用户:电信宽...

  • CDN原理

    Content Delivery Network,即“内容发布与速递网络”,能为企业站点提供更快速、稳定服务的网络...

  • CDN原理

    squid反向代理服务器加速web 一、实验环境(1)两台linux主机(Red Hat Enterprise L...

  • CDN原理

    BIND 视图技术实现DNS,Squid做前端缓存简单的CDN的搭建:1、CDN的工作原理:当外网访问内网域名的时...

网友评论

      本文标题:CDN原理

      本文链接:https://www.haomeiwen.com/subject/airneqtx.html