Freewind @ Thoughtworks scala java javascript dart 工具 编程实践 月结 math python english [comments admin] [feed]

(2014-03-23) 正向代理与反向代理

广告: 云梯:翻墙vpn (省10元) 土行孙:科研用户翻墙http proxy (有优惠)

前两天在配置varnish的时候,我看到配置文件中有不少后端服务器的设置,觉得这是在配“反向代理”,但同事说这是“正向代理”。我不确定哪个对,以及它们之间有何区别,便查了一下。

网上资料很多,便不再重复。我自己的理解是这样的:

正向代理

我们想访问某个网站,但是访问不了,需要借助另一台服务器的帮助。比如我们番羽墙时会设一些代理服务器(http的,socks的等),然后输入我们要访问的网站,代理服务器便会替我们把内容取回来。这些代理服务器所做的事情就是“正向代理”。

在正向代理中,目标网站是主角,代理服务器是助手,通常我们都知道自己正在使用代理。

现实举例:

  1. 我们在火车票代售点买票:“我要买一张明天中午从西安到北京的火车票”
  2. 我们托人从海外代购:“某某某,能帮我从美国买一个nexus5手机吗”
  3. 发快递:“快递员,请帮我把这个东西发到某个地方”

反向代理

我们访问某个网址,它在自己的域名下提供了很多内容,看起来都像是它自己的。我们以为自己访问的就是原始的网站,实际上它只是一个代理服务器。它根据我们的请求路径,从某一个我们不知道的地方拿到了内容,然后当成它自己的东西提供给我们。

在反向代理中,代理服务器是主角,内容提供者是助手,通常我们并不知道自己正在访问一个代理服务器。

现实举例:

  1. 我们在超市买东西:买了很多,各个牌子都有,但是我们不知道它们从哪儿来的,只知道超市有卖,好像是超市提供的似的
  2. 我们把项目外包给某人做:我们要求在规定时间能完成,但他是自己做还是转包给别人,我们并不清楚,只知道他能帮我完成

结论

对于公司项目,我们是想用varnish作为前端,让用户在同一个域名下访问所有的内容。而varnish会根据请求路径的不同,到不同的服务器和网站中拿到相应内容,提供给用户。

对于这种需求,很明显就是“反向代理”了。

同时,在varnish的文档上写着:

Varnish is a reverse HTTP proxy, sometimes referred to as a HTTP accelerator or a web accelerator.

comments powered by Disqus