“正向代理、反向代理”在平时工作中会经常听到,甚至经常用过,但具体是什么意思没有去深入了解过。于是查资料整理了一下。
正向代理:主动地通过另外一个服务器(意义上的服务器而不是指硬件上的,可以是一台普通电脑)去代理本机对指定目标的请求操作。关键点是要在客户端做配置,平时我们在IE浏览器的配置“代理服务器地址”就是使用正向代理的过程,主要是通过代理的服务器帮我们去访问别的服务;最常的使用场景就是“翻墙”了,如下图:
假设服务器B就是谷歌的服务器,正常直接访问是被墙了,通过设置一个香港的“代理服务器Z”,Z是可以正常访问谷歌的,用户A是可以正常访问Z的,所以通过这种正向代理就能访问被墙的谷歌了。
其次,依然是上图,如果原本的正常线路是比较长而且带宽不够,而代理服务器Z这条线路若是高带宽则能提高访问速度,但我们平时怎么设的代理服务器都很难做到提速,除非是专门架设的线路;
因为是通过另外一个服务器来转交请求,所以正向代理还有一个好处,就是能隐藏原始请求的身份,通俗来说就是黑客通过自己完全控制(或不完全)的“肉鸡”作代理去做各种操作,最终都只能查到“肉鸡”上,达到了隐匿的效果。
一句话表达,你找一个人,将你要做的事,让他来代理帮你去做。
反向代理:客户端正常发送请求,在服务器端的反向代理将判断向何处并转交该请求,并将获得的内容返回给客户端。客户端无需配置,对客户端来说反向代理是被动的、无感知的。
主要应用于服务器安全与负载均衡,如下图:
通过设置“资源服务器”只允许服务器Z访问,并在服务器Z做反向代理,众多用户都是通过Z来访问,一定程度上增加了安全性;
负载均衡则是有多个“资源服务器”,在“反向代理服务器Z”分配请求,达到各个“资源服务器”的负载均衡。
在不同地区布多个反向代理服务器,和资源的缓存,快速响应也是CDN的实现原理之一;
用反向代理来做负载均衡最主要的实践是web服务器,一个比较典型的就是nginx。
一句话表达,一家大公司将自己的业务统一交给一家代理公司处理,以减少自己本身的工作和提高效率。
总结:对用户来说正向代理是主动的,并且是可以指向所有互联网上的资源的;而反而代理是被动的,通常只指向该代理的某些资源。对于资源服务器来说,正向代理一般是不受控制的,也相当于一个正常用户访问;反向代理是主动配置的,是对外的入口(可有多个)。其实两个代理都有一个共同点,就是通过一个代理服务器处理后才到“资源服务器”,可以做到资料的统一管理,例如Cache(缓存)等,可以做到更高效。