作者:z00w00
根据古龙的武侠小说,代理服务技术是一项非常古老的技术,在互联网的早期就已经使用。实现代理技术的一般方式是在服务器上安装代理服务软件,使其成为代理服务器,从而实现代理技术。常用的代理技术分为正向代理、反向代理和透明代理。本文旨在针对这三种代理解释一些基本原理和具体的适用范围,以便我们对代理服务技术有更深入的了解。
一:正向代理(Forward Proxy)一般来说,除非另有说明,代理技术默认指前向代理技术。前向代理的概念如下:前向代理是位于客户端[用户A]和源服务器[服务器B]之间的服务器[代理服务器Z]。为了从源服务器获取内容,用户A向代理服务器Z发送请求并指定目标(服务器B),然后代理服务器Z将请求转发给服务器B,并将获取的内容返回给客户端。客户端必须进行一些特殊设置才能使用转发代理。
(图1.1)
从以上概念可以看出,本文所谓的前向代理,是指代理服务器访问的是目标服务器[服务器B]而不是访问者[用户A],这就是前向代理的含义。为什么使用代理服务器而不是访问者[用户A]访问服务器B?这要从代理服务器的含义说起。使用转发代理服务器的主要功能如下:
1.访问无法访问的服务器b,如下图1.2所示。
(图1.2)
让我们摆脱复杂的网络路由场景,看看图1.2,假设图中的路由器从左到右分别命名为R1和R2。首先假设用户A需要通过R1、R2路由器等路由节点访问服务器B,如果路由器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.缓存功能
缓存技术和代理服务技术密切相关(不仅正向代理,反向代理也使用缓存技术。如上图所示,如果在用户A访问服务器B上的数据J之前,已经有人通过代理服务器Z访问了服务器B上的数据J,那么代理服务器Z会将数据J保存一段时间。如果有人碰巧访问了数据J,代理服务器Z会停止访问服务器B,直接将缓存的数据J发送给用户a,这种技术在缓存中的术语叫做缓存命中。如果有更多像用户A这样的用户访问代理服务器Z,那么这些用户就可以直接从代理服务器Z获取数据J,而不是一路跑到服务器B下载数据。
4.客户端访问授权
这一方面至今仍被广泛使用。例如,一些公司使用ISA服务器作为转发代理服务器来授权用户是否可以访问Internet。
(图1.3)
图1.3防火墙被用作过滤外部网络访问的网关。假设用户A和用户B都设置了代理服务器,允许用户A访问互联网,但不允许用户B访问互联网(这在代理服务器Z上是有限制的)。这样,用户A因为授权可以通过代理服务器访问服务器B,而用户B没有被代理服务器Z授权,所以在访问服务器B时,数据包会被直接丢弃。
5.隐藏访客的行踪
如下图1.4所示,我们可以看到,服务器B并不知道用户A实际访问的是自己,因为代理服务器Z直接与服务器B交互,而不是与用户A交互,如果代理服务器Z被用户A完全控制(或不完全控制),那就叫“肉鸡”。
(图1.4)
总而言之,转发代理是位于客户端和源服务器之间的服务器。为了从源服务器获取内容,客户端向代理发送请求并指定目的地(源服务器),然后代理将请求转发给源服务器,并将获取的内容返回给客户端。客户端必须设置转发代理服务器,当然前提是知道转发代理服务器的IP地址和代理程序的端口。
二:反向代理(reverse proxy)反向代理与正向代理正好相反。对于客户端来说,代理服务器就像原来的服务器一样,客户端不需要任何特殊的设置。向反向代理的name 空空间中的内容发送一个普通的请求,然后反向代理会确定将请求转发到哪里(原服务器)并将获得的内容返回给客户端。
使用反向代理服务器的功能如下:
1.保护和隐藏原始资源服务器
(图2.1)
用户A一直认为自己访问的是原服务器B而不是代理服务器Z,但实际上反向代理服务器接受用户A的响应,从原资源服务器B获取用户A所需的资源,然后发送给用户A,由于防火墙的原因,只允许代理服务器Z访问原资源服务器B,虽然在这个虚拟环境中,防火墙和反向代理共同保护原资源服务器B,但用户A并不知情。
2.负载平衡
(图2.2)
当有多个反向代理服务器时,我们甚至可以将它们组成集群。当更多的用户访问资源服务器B时,不同的代理服务器Z(x)会回答不同的用户,然后发送不同用户需要的资源。当然,反向代理服务器和正向代理服务器一样具有缓存的功能。它可以缓存原资源服务器B的资源,而不是每次都向原资源服务器B请求数据,尤其是一些图片、文件等静态数据。如果这些反向代理服务器可以来自与用户X相同的网络,则用户X可以以高质量的速度访问反向代理服务器X。这是CDN技术的核心。
(图2.3)
没有解释CDN,所以去掉了CDN的关键核心技术,智能DNS。只是为了说明CDN技术其实是利用了反向代理的原理。反向代理结论正好与正向代理相反。对于客户端来说,就像原来的服务器一样,客户端不需要任何特殊的设置。客户端向反向代理的name 空空间中的内容发送一个普通的请求,然后反向代理会决定将请求转发到哪里(原服务器),并将获得的内容返回给客户端,就像内容是自己的一样。基本上网上做正反代理的程序很多,能做正反代理的软件大部分也能做正反代理。Squid是目前最流行的开源软件,可以做正向代理,也可以做很多人用来做反向代理的前端服务器。此外,MS ISA还可以用作WINDOWS平台下的转发代理。反向代理中最重要的实践是WEB service,NGINX是近年来最火的一个。网上有人说NGINX不能做转发代理,其实是不对的。NGINX也可以做转发代理,但是用的人比较少。
三:透明代理如果按照人的血缘关系来划分正向代理、反向代理和透明代理。那么正向代理和透明代理显然是表兄弟,而正向代理和反向代理是表兄弟。

透明代理意味着客户端根本不需要知道代理服务器的存在。它适应你的请求领域和传输真正的IP。注意,加密的透明代理属于匿名代理,这意味着不需要设置代理。
透明代理实践的一个例子是现在许多公司使用的行为管理软件。下图3.1
(图3.1)
用户a和用户b不知道行为管理设备充当透明代理。当用户a或用户b向服务器a或服务器b提交请求时,透明代理设备根据自己的策略拦截并修改用户a或b的消息,并作为实际的请求者向服务器a或b发送请求,当接收回信息时,透明代理根据自己的设置将允许的消息发送回用户a或b。如上图所示,如果透明代理设置不允许访问服务器b,那么用户a或用户b也不会。
http://blog.51cto.com/z00w00/1031287







