一、代理服务器

在开始讲解前,要先知道代理服务器是什么?我们可以理解在平时网上时,用户访问一个网站(服务器),网站(服务器)为我们提供服务。这个过程就是:用户A 到 原始服务器B,原始服务器B 到 用户A,而代理服务器就是在这个过程中另外添加一个服务器。这是我们的过程就成了这样:用户A—-代理服务器C—-原始服务器B

img

二、正向代理

在一般情况下,代理技术默认说的是正向代理技术。

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

可以理解为:所谓的正向代理就是代理服务器替代访问方【用户A】去访问目标服务器【服务器B】

2.1、正向代理的意义所在

2.1.1、访问本无法访问的服务器B

img

我们抛除复杂的网络路由情节来看图,假设图中路由器从左到右命名为R1,R2,假设最初用户A要访问服务器B需要经过R1和R2路由器这样一个路由节点,如果路由器R1或者路由器R2发生故障,那么就无法访问服务器B了。但是如果用户A让代理服务器Z去代替自己访问服务器B,由于代理服务器Z没有在路由器R1或R2节点中,而是通过其它的路由节点访问服务器B,那么用户A就可以得到服务器B的数据了。现实中的例子就是“翻墙”。不过自从VPN技术被广泛应用外,“翻墙”不但使用了传统的正向代理技术,有的还使用了VPN技术。


2.1.2、Cache(缓存)作用

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


2.1.3、隐藏访问者的行踪

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

img


2.2、总结一下

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

正向代理中,代理服务器代理着用户

三、反向代理

反向代理正好与正向代理相反,对于客户端而言代理服务器就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端。

3.1、反向代理的意义所在

3.1.1、保护和隐藏原始资源服务器

img

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


3.1.2 负载均衡

这是一个很强大的功能,当我们有多台原始服务器时提供服务时,我们可以使用反向代理服务器做到负载均衡,让所有的请求先来到代理服务器,让代理服务器根据我们设置的负载均衡策略(如轮询、权重等),去分发请求到不同的原始服务器。

这里有个问题就是代理服务器怎么知道我到底要分发到哪些原始服务器呢?当然是提前在代理服务器中设置原始服务器的IP地址等。


3.1.3、其他作用

反向代理同样可以做到Cache(缓存)等功能。


3.2、总结一下

反向代理结论与正向代理正好相反,对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。

反向代理中,代理服务器代理着服务器