SuooL's Blog

蛰伏于盛夏 藏华于当春

正向代理、反向代理和透明代理

正向代理

一般意义上的代理均是指的正向代理服务器,其概念如下:

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

正向代理服务的作用

1. 替代访问——访问本无法直接访问的资源

现实生活中出于安全、隐私及其他种种因素考虑,某些服务器资源无法直接被访问,这个时候就需要借助正向代理服务器作为跳板进行访问。比如我们很熟悉的 VPN 就使用了正向代理技术。

2. 加速访问目标服务器

举个身边的例子,校园网的宿舍网速往往非常感人,因为在学校的路由限制了带宽,所以导致访问外网资源的带宽也被限制,但是如果在校园网内搭建一个高带宽的代理服务器,这个服务器出口带宽不被人为限制,然后我们电脑使用这个代理服务器上网的话,加速访问外网资源了。

3. Cache作用

Cache(缓存)技术和代理服务技术是紧密联系的(不光是正向代理,反向代理也使用了Cache(缓存)技术。

还是上面的例子,假如某宿舍的学生 A 通过这个代理服务器下载了某个动作电影,而在此之前同学 B 已经通过这个代理服务器下载过,这个时候代理服务器可以将这个电影保存在代理服务器上一段时间,A 去下载的时候直接返回给 A,而不需要再跑去目标服务器重新下载。这个过程就是 Cache 命中,如果客户端和代理之间带宽够高,也可以起到加速访问的作用,达到秒下载的效果。

4. 客户端访问授权

比如在一些机构内部不能随意访问外网,这个时候就可以用正向代理服务器,为不同的用户分配固定 IP 或者 ID 身份识别,客户端通过设置代理服务器访问网络时,代理服务器会检查网络请求的客户端来源,非允许的客户端请求数据包会被直接丢弃。

5. 隐藏访问者的行踪

显然,如果我们通过一个代理服务器去访问某个网站资源,网站服务器只能看到代理服务器在发请求,并不知道其背后真正的请求者,这就可以在一定程度上起到隐匿行踪的作用。

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

反向代理

反向代理正好与正向代理相反,对于客户端而言代理服务器就像是原始服务器,并且客户端不需要进行任何特别的设置。
客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,使得这些内容就好似他自己一样,一次客户端并不会感知到反向代理后面的服务,也因此不需要客户端做任何设置,只需要把反向代理服务器当成真正的服务器就好了。

举个例子,用户访问 http://suooL.net/404
但suool.net上并不存在 404 页面,于是它是偷偷从另外一台服务器上取回来,然后作为自己的内容吐给用户,但用户并不知情,这很正常。这个域名所对应的服务器就使用了反向代理的功能。

反向代理服务器的作用

1.保护和隐藏资源服务器

2.负载均衡
CDN 技术的就是利用了反向代理技术

两者区别

用途上来讲:

正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。
正向代理还可以使用缓冲特性减少网络使用率。
反向代理的典型用途是将防火墙后面的服务器提供给Internet用户访问。
反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。

另外,反向代理还可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在于同一个URL空间下。

安全性来讲:

正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。

反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。

透明代理

透明代理的意思是客户端根本不需要知道有代理服务器的存在,它改编你的 request fields(报文),并会传送真实 IP。注意,加密的透明代理则是属于匿名代理,意思是不用设置使用代理了。

GFW 显然实现了透明代理。

泡面一杯