正向代理、反向代理、透明代理
代理服务技术在互联网早期就开始使用了。一般实现代理技术的方式就是在服务器上安装代理服务软件,让其成为一个代理服务器,从而实现代理技术。
常用的代理技术分为:正向代理、反向代理和透明代理。
此文主要针对这三种代理说一些基本原理和具体适用范围,便于我们更深入理解代理服务技术
正向代理
通常,没有特别说明,代理技术默认说的就是正向代理技术。正向代理概念如下:
正向代理(Forward Proxy)是一个位于客户端(用户A)和原始服务器(服务器B)之间的服务器(代理服务器Z),为了从原始服务器取得内容,用户A向代理
服务器Z发送了一个请求并指定目标(服务器B),然后代理服务器Z向服务器B转交请求并将获得的内容返回给客户端。客户端必须做一些特别的设置才能
使用正向代理。

此时,我们可以知道,文中所谓的正向代理就是代理服务器替代客户端去访问服务端。这就是正向代理的意义所在。为什么要用代理服务器去访问,而不是
由客户端直接去访问服务端呢?这就要提到代理服务器的作用了:
- 访问本无法访问的服务器B
我们这块忽略复杂的网络路由情节。假设用户A访问服务器B需要经过两个路由器R1、R2,如果路由器R1或路由器R2发生故障,那么就不能访问
服务器B了。但是如果用户A让代理服务器Z去代替自己访问服务器B,由于代理服务器Z没有在路由器R1或R2节点中,而是通过其他路由节点访问
服务器B,那么用户A就可以获取到服务器B的数据了。
现实中的例子就是"FQ"。VPN技术被广泛使用后,VPN也可以实现"FQ"。 - 加速访问服务器B
假设用户A到服务器B,经过R1路由器和R2路由器,而R1到R2路由器的链路是一个低带宽链路。而用户A到代理到代理服务器Z,从代理服务器Z
到服务器B都是高带宽链路。那样就可以加速访问服务器B了。 - Cache作用
Cache技术和代理服务技术是紧密联系的。如果在用户A访问服务器B某数据D之前,已经有人通过代理服务器Z访问过服务器B上的数据D,那么
代理服务器Z会把数据D保存一段时间,如果有人正好取该数据D,那么代理服务器不再访问服务器B,会把缓存的数据D直接应答给该用户即用户
A。这个技术在Cache中术语叫做Cache命中。 - 客户端访问授权
这方面的内容现今使用的还是比较多的,例如一些公司采用ISA SERVER作为正向代理服务器来授权用户是否有权限访问互联网
上图防火墙作为网关,用来过滤外网对其访问。假设用户A和用户B都设置了代理服务器,用户A允许访问互联网,而用户B不允许访问互联网(
在代理服务器Z上做限制)这样用户A因为授权,可以通过代理服务器访问到服务器B,而用户B因为没有代理服务器Z授权,所以访问服务器B
时,数据包被直接丢弃。 - 隐藏访问者的行踪
上图我们可以看到服务器B并不知道访问自己的实际上是用户A,因为代理服务器Z代替用户A直接去与服务器B进行交互。如果代理服务器Z
被用户A完全控制(或不完全控制),会被冠以"肉鸡"称呼。
反向代理服务器
反向代理正好与正向代理相反,对于客户端而言代理服务器就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的
命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端。
反向代理服务器作用:
- 保护和影藏原始资源服务器
用户A始终认为它访问的是原始服务器B而不是反向代理服务器Z,但实际上反向代理服务器接收用户A的请求,从原始服务器B中取得用户A的需求资源,然后
应答给用户A。由于防火墙的作用,只允许代理服务器Z访问资源服务器B。但是用户A并不知情。 - 负载均衡
![]()
当反向代理服务器不止一个的时候,我们甚至可以把他们做成集群,当更多的用户请求资源服务器B的时候,让不容的代理服务器去应答不同的用户,分别应答
给不同的用户。
当然反向代理服务器像正向代理服务器一样拥有CACHE作用,它可以缓存原始资源服务器B的资源,而不是每次都要向原始服务器B请求资源,
特别是一些静态的数据,比如图片和文件,如果这些反向代理服务器能够做到和用户来自同一个网络,那么用户访问代理服务器就会得到很高质量的速度。这是
CDN技术的核心部分。

当然此处我们探究的并不是CDN,因此忽略CDN关键的核心技术智能DNS。只是想说明CDN技术实际上利用的正是反向代理原理这块。
反向代理结论与正向代理正好相反,对于客户端而言它就像原始服务器,并且客户端不需要进行任何特别的配置。客户端向反向代理的命名空间中的内容发送普通
请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。
基本上,网上做正反向代理的程序很多,能做正向代理的软件大部分也可以做反向代理。开源软件中最流行的就是squid,既可以做正向代理,也有很多人用来做
反向代理的前端服务器。另外MS ISA也可以用来在WINDOWS平台下做正向代理。反向代理中最主要的实践就是WEB服务,近些年来最火的就是Nginx了。
网上有人说NGINX不能做正向代理,其实是不对的。NGINX也可以做正向代理,不过用的人比较少了。
透明代理
如果把正向代理、反向代理和透明代理按照人类血缘关系来划分的话。那么正向代理和透明代理是明显的堂亲关系,而正向代理和反向代理就是
表亲关系了。
透明代理的意思是客户端根本不需要知道有代理服务器的存在,它改变你的request fields,并会传送真是IP。注意,加密的透明代理则是属于
匿名代理,意思是不用设置使用代理了。

如上图,透明代理实践的例子就是现在公司使用的行为管理软件。用户A和用户B并不知道行为管理设备充当透明代理行为,当用户A或
用户B向服务器A或服务器B请求数据时,透明代理设备根据自身策略拦截并修改用户A或B的报文,并作为实际的请求方,向服务器A或
B发送请求,当接收信息回传,透明代理再根据自身的设置把允许的报文应答给用户A或B。如果透明代理设置不允许访问服务器B,那
用户A用户B就不会得到服务器B的数据了


浙公网安备 33010602011771号