squid-CDN技术简介

CDN(Content Delivery Network)即内容分发网络。通过在现有的Internet中增加一层新的网络架构,部署边缘服务器,将网站的内容发布到最接近用户的Cache(缓存)服务器,使用户可以就近取得所需的内容,实现用户就近访问,有效提升网站的访问效果、安全性和稳定性。

工作流程
当代理服务器中有客户端需要的数据时:
1)客户端向代理服务器发送数据请求;
2)代理服务器检查自己的数据缓存;
3)代理服务器在缓存中找到了用户想要的数据,取出数据;
4)代理服务器将从缓存中取得的数据返回给客户端。
当代理服务器中没有客户端需要的数据时:
1)客户端向代理服务器发送数据请求;
2)代理服务器检查自己的数据缓存;
3)代理服务器在缓存中没有找到用户想要的数据;
4)代理服务器向Internet 上的远端服务器发送数据请求;
5)远端服务器响应,返回相应的数据;
6)代理服务器取得远端服务器的数据,返回给客户端,并保留一份到自己的数据缓存中。

其中,Squid代理服务器工作在TCP/IP的应用层

代理服务技术是一门很古老的技术,是在互联网早期出现就使用的技术。一般实现代理技术的方式就是在服务器上安装代理服务软件,让其成为一个代理服务器,从而实现代理技术。常用的代理技术分为正向代理、反向代理和透明代理。

一、正向代理(Forward Proxy)



一般情况下,如果没有特别说明,代理技术默认说的是正向代理技术。

 正向代理(forward)是一个位于客户端【用户A】和原始服务器(origin server)【服务器B】之间的服务器【代理服务器Z】,为了从原始服务器取得内容,用户A向代理服务器Z发送一个请求并指定目标(服务器B),然后代理服务器Z向服务器B转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。如下图1.1 

(图1.1)

从上面的概念中,我们看出,所谓的正向代理就是代理服务器替代访问方【用户A】去访问目标服务器【服务器B】

这就是正向代理的意义所在。而为什么要用代理服务器去代替访问方【用户A】去访问服务器B呢?这就要从代理服务器使用的意义说起。

使用正向代理服务器作用主要有以下几点:

1、访问本无法访问的服务器B,如下图1.2

(图1.2)

我们抛除复杂的网络路由情节来看图1.2,假设图中路由器从左到右命名为R1,R2假设最初用户A要访问服务器B需要经过R1和R2路由器这样一个路由节点,如果路由器R1或者路由器R2发生故障,那么就无法访问服务器B了。但是如果用户A让代理服务器Z去代替自己访问服务器B,由于代理服务器Z没有在路由器R1或R2节点中,而是通过其它的路由节点访问服务器B,那么用户A就可以得到服务器B的数据了。

2、加速访问服务器B

这种说法目前不像以前那么流行了,主要是带宽流量的飞速发展。早期的正向代理中,很多人使用正向代理就是提速。还是如图1.2 假设用户A到服务器B,经过R1路由器和R2路由器,而R1到R2路由器的链路是一个低带宽链路。而用户A到代理服务器Z,从代理服务器Z到服务器B都是高带宽链路。那么很显然就可以加速访问服务器B了。

3、Cache作用
Cache(缓存)技术和代理服务技术是紧密联系的(不光是正向代理,反向代理也使用了Cache(缓存)技术。还如上图所示,如果在用户A访问服务器B某数据X之前,已经有人通过代理服务器Z访问过服务器B上得数据J,那么代理服务器Z会把数据J保存一段时间,如果有人正好取该数据J,那么代理服务器Z不再访问服务器B,而把缓存的数据J直接发给用户A。这一技术在Cache中术语就叫Cache命中。如果有更多的像用户A的用户来访问代理服务器Z,那么这些用户都可以直接从代理服务器Z中取得数据J,而不用千里迢迢的去服务器B下载数据了。

4、客户端访问授权
这方面的内容现今使用的还是比较多的,例如一些公司采用ISA SERVER做为正向代理服务器来授权用户是否有权限访问互联网,挼下图1.3

(图1.3)

图1.3防火墙作为网关,用来过滤外网对其的访问。假设用户A和用户B都设置了代理服务器,用户A允许访问互联网,而用户B不允许访问互联网(这个在代理服务器Z上做限制)这样用户A因为授权,可以通过代理服务器访问到服务器B,而用户B因为没有被代理服务器Z授权,所以访问服务器B时,数据包会被直接丢弃。

5、隐藏访问者的行踪

如下图1.4 我们可以看出服务器B并不知道访问自己的实际是用户A,因为代理服务器Z代替用户A去直接与服务器B进行交互。如果代理服务器Z被用户A完全控制(或不完全控制),会惯以“肉鸡”术语称呼。

 总结:


正向代理是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标为原始服务器,然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端要设置正向代理服务器,前提是要知道正向代理服务器的IP地址,还有代理程序的端口。

二、反向代理(reverse proxy)


反向代理正好与正向代理相反,对于客户端而言代理服务器就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端。 使用反向代理服务器的作用如下:
1、保护和隐藏原始资源服务器如下图2.1

(图2.1)

用户A始终认为它访问的是原始服务器B而不是代理服务器Z,但实用际上反向代理服务器接受用户A的应答,从原始资源服务器B中取得用户A的需求资源,然后发送给用户A。由于防火墙的作用,只允许代理服务器Z访问原始资源服务器B。尽管在这个虚拟的环境下,防火墙和反向代理的共同作用保护了原始资源服务器B,但用户A并不知情。

2. 负载均衡如下图2.2:

当反向代理服务器不止一个的时候,我们甚至可以把它们做成集群,当更多的用户访问资源服务器B的时候,让不同的代理服务器Z(x)去应答不同的用户,然后发送不同用户需要的资源。

当然反向代理服务器像正向代理服务器一样拥有CACHE的作用,它可以缓存原始资源服务器B的资源,而不是每次都要向原始资源服务器B请求数据,特别是一些静态的数据,比如图片和文件,如果这些反向代理服务器能够做到和用户X来自同一个网络,那么用户X访问反向代理服务器X,就会得到很高质量的速度。这正是CDN技术的核心。如下图2.3

(图2.3)

基本上,网上做正反向代理的程序很多,能做正向代理的软件大部分也可以做反向代理。开源软件中最流行的就是squid,既可以做正向代理,也有很多人用来做反向代理的前端服务器。

反向代理中最主要的实践就是WEB服务,近些年来最火的就是Nginx了。网上有人说NGINX不能做正向代理,其实是不对的。NGINX也可以做正向代理,不过用的人比较少了。

三、透明代理

透明代理的意思是客户端根本不需要知道有代理服务器的存在,因为它改变你的request fields(报文),并会传送真实IP。注意,加密的透明代理则是属于匿名代理,意思是不用设置使用代理了。 透明代理实践的例子就是时下很多公司使用的行为管理软件。如下图3.1

(图3.1)

用户A和用户B并不知道行为管理设备充当透明代理行为,当用户A或用户B向服务器A或服务器B提交请求的时候,透明代理设备根据自身策略拦截并修改用户A或B的报文,并作为实际的请求方,向服务器A或B发送请求,当接收信息回传,透明代理再根据自身的设置把允许的报文发回至用户A或B,如上图,如果透明代理设置不允许访问服务器B,那么用户A或者用户B就不会得到服务器B的数据。

=================================================================================================

配置:

环境:

客户端(192.168.10.129)----------------> CDN代理服务器(192.168.10.131/192.168.131)---------------------->WEB服务器(192.168.1.132)。

1. 正向代理:

(1)代理服务器配置
# yum install squid -y
# vim /etc/squid/squid.conf
56--- http_access allow all
# systemctl restart squid

(2)web服务器配置

在浏览器中手动配置代理服务器为192.168.10.131,便可正常访问WEB服务器(192.168.1.132)。

2. 反向代理:

(1) 代理服务器设置
开启路由转发

#临时开启
echo "1" > /proc/sys/net/ipv4/ip_forward  

#永久开启                  
# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
安装软件:
# yum install squid -y
关闭防火墙、selinux
修改配置文件
# vim /etc/squid/squid.conf
#将端口监听在 192.168.10.129(CDN本机IP):80 上,accel 指加速模式,vhost,vport 用于转发请求
http_port 80 accel vhost vport
#计算机名,可以为IP地址,用于错误页面的显示
visible_hostname desk.wu.com
#指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4
cache_mem 16 MB
#缓存目录大小为512M,这个可以按实际磁盘大小来定,指定有16个二级目录,每个二级目录下有256个子目录
cache_dir ufs /var/spool/squid 512(大小) 16(二级目录) 256(子目录)
#最大缓存文件大小为 4MB ,超过的直接传给用户,不作缓存
maximum_object_size 4 MB
#访问日志文件路径,记录了用户访问 Internet 的详细信息,可以查看每用户的上网记录
cache_access_log /var/log/squid/access.log
#缓存日志文件路径,记录了缓存相关的日志信息
cache_log /var/log/squid/cache.log
#网页缓存日志文件路径,记录了网页在缓存中调用情况
cache_store_log /var/log/squid/store.log
#缓存磁盘空间大于 90% 时自动清理
cache_swap_high 90
#清理到 80% 时停止
cache_swap_low 80
#cache_peer 后端真实服务器地址,端口,0 为 ICP 端口号(多个 Squid 时用),originserver原始资源服务器 调度策略 服务器权重
cache_peer 192.168.1.132 parent 80 0 originserver round-robin weight=1
重启服务
[root@squid ~]# system restart squid
代理服务器要清除防火墙规则
# iptables -t nat -F
(2) 客户端验证
直接访问代理服务器的IP
[root@squid ~]# firefox http://192.168.10.131 &

3. 透明代理:

(1). 代理服务器配置
# yum install squid -y
# systemctl start squid
开启路由转发
echo "1" > /proc/sys/net/ipv4/ip_forward 临时开启

# vim /etc/sysctl.conf 永久开启
net.ipv4.ip_forward = 1

# vim /etc/squid/squid.conf

55 # And finally deny all other access to this proxy
56 http_access allow all
57
58 # Squid normally listens to port 3128
59 http_port 3128 transparent

# iptables -F
# iptables -t nat -A PREROUTING -i ens38 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to 3128

(这里的ens38是CDN代理服务器上和客户端同网段的网卡)
-t:指定操作的是哪张表
-A:添加一条策略
PREROUTING:路由前
-s IP:指定源IP(客户机网段)
-p tcp:协议
--dport:目标端口
-j : 指定动作
REDIRECT:重定向
--to-port 端口:重定向到某个端口
# iptables -t nat -A PREROUTING -i ens38 -s 192.168.10.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
#iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

(2).web服务器配置同正向代理。

(3).客户端配置。

修改网关为代理服务器IP

[root@wuyang ~]# vim /etc/sysconfig/network-scripts/ifcfg-enp2s0

1 BOOTPROTO=none
2 DEVICE=enp2s0
3 ONBOOT=yes
4 IPADDR=192.168.10.129
5 PREFIX=24
6 GATEWAY=192.168.10.131

猜你喜欢

转载自blog.csdn.net/Ezra1991/article/details/88431171
今日推荐