正向代理与反向代理的区别

原文

概念

正向代理是一个位于客户端和目标服务器之间的代理服务器(中间服务器)。为了从目标服务器取得内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理向目标服务器转交并且将获得的内容返回给客户端。正向代理的情况下客户端必须要进行一些特别的设置才能使用。

反向代理正好相反。对于客户端来说,反向代理就好像真实服务器。并且客户端不需要进行任何设置。客户端向反向代理发送请求,接着反向代理判断请求走向何处,并将请求转交给客户端,使得这些内容就好似他自己一样,因此客户端并不会感知到反向代理后面的服务,不需要客户端做任何设置,只需要访问反向代理服务器就好了。

区别

正向代理是代理客户端,为客户端收发请求,使真实客户端对服务器不可见。正向代理是为客户端服务的,代替客户端请求真实服务器。
反向代理是代理服务器端,为服务器收发请求,使真实服务器对客户端不可见。反向代理是保护真实服务器的。代替真实服务器将服务发布出去。

从上面的描述也能看得出来正向代理和反向代理最关键的两点区别:
1. 是否指定目标服务器
2. 客户端是否要做设置

下面用一张图来表示两者的差异:

正向代理中,proxy和client同属一个LAN,对server透明; 反向代理中,proxy和server同属一个LAN,对client透明。 实际上proxy在两种代理中做的事都是代为收发请求和响应(client无法直接访问server),不过从结构上来看正好左右互换了下,所以把前者那种代理方式叫做正向代理,后者叫做反向代理。

从用途上来区分:

  • 正向代理:正向代理用途是为了在防火墙内的局域网提供访问internet的途径。另外还可以使用缓冲特性减少网络使用率
  • 反向代理:反向代理的用途是将防火墙后面的服务器提供给internet用户访问。同时还可以完成诸如负载均衡等功能

从安全性来讲:

  • 正向代理:正向代理允许客户端通过它访问任意网站并且隐蔽客户端自身,因此你必须采取安全措施来确保仅为经过授权的客户端提供服务
  • 反向代理:对外是透明的,访问者并不知道自己访问的是代理。对访问者而言,他以为访问的就是原始服务器
正向代理应用

从上面的介绍也就可以猜出来正向代理的至少一个功能,翻墙,顺便能隐藏客户端IP。

用户A(国内IP)无法访问 google.com,但是能访问服务器B(国外IP),而服务器B可以访问 google.com。于是用户A访问服务器B,通过服务器B去访问 google.com,服务器B收到请求后,去访问 google.com,google.com把响应信息返回给服务器B,服务器B再把响应信息返回给A。这样,通过代理服务器B,就实现了翻墙。

反向代理应用

从上面的介绍也可以猜出来反向代理的至少一个功能,负载均衡。

假设用户A访问http://www.somesite.com/something.html ,但http://www.somesite.com 上并不存在something.html页面,于是接收用户请求的该服务器就偷偷从另外一台服务器上取回来,然后返回给用户,而用户并不知道something.html页面究竟位于哪台机器上。

反向代理的作用就比较多了:

  • 保护和隐藏原始资源服务器
  • 加密和SSL加速
  • 负载均衡
  • 缓存静态内容
  • 压缩
  • 减速上传
  • 安全
  • 外网发布

简单介绍保护和隐藏原始资源服务器:

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

透明代理

透明代理比较类似正向代理的功能,差别在于客户端根本不知道代理的存在,它改变你的request,并会传送真实IP(使用场景就是公司限制网络的访问)。

比如为了工作效率或者安全,A公司屏蔽了QQ软件的使用。A公司的员工接上了网络,但发现无法使用qq。这就是透明代理捣的鬼。公司在内网和外网的中间插入一个透明代理,这个代理会根据规则抓取请求内容,遇到qq的请求我就把这个请求给屏蔽掉,这样就完成了透明屏蔽。当然了,如果你明白原理,就可以自己搞个正向代理来绕过公司的屏蔽。可以通过SSH访问云服务器,云服务器充当正向代理,即可访问QQ的服务器。

Share