人亦有言进退维谷 2012-04-22
Web代理服务器的职责是:用来接收浏览器发送的请求,并将请求转发给真正的web服务器(其实就是存放请求资源的web服务器),然后接收web服务器返回来的内容并交给浏览器。
传统代理
代理服务器以前通常用来访问互联网的web站点,现在的浏览器也都有设置代理服务器的选项,包括QQ了飞信之类的,只要局域网中有一台机子可以连外网,局域网中的计算机都可以使用它作为代理服务器进行上网,当然这需要一些配置,配置问题不是我们今天讨论的内容,有兴趣同学可以自己配置一下
反向代理
“反向”,为什么叫做反向代理呢?
我们先分析一下传统代理,局域网中的计算机通过代理服务器访问web服务器,假如局域网中有20台机器都用该代理,那么对于web服务器来说都是同一台主机发送过来的请求,这样局域网中用户计算机对web服务器是透明的,代理服务器是在客户端
反向代理服务器呢?我们看一下反向代理服务器的工作流程,
只有传统代理: (浏览器<---->传统代理服务器(在客户端哦))<----->web服务器 注我用括号括起来代表他们是一家的,<----->代表二者可以互相传输数据。
只有反向代理: 浏览器<---->(反向代理服务器(在服务器端)<----->web服务器 )
既有反向代理也有传统代理 : (浏览器<---->传统代理服务器)<---->(反向代理服务器<----->web服务器 ) 我们通常将后者web服务器成为后端服务器
上面看来 反向代理服务器对用户浏览器透明,代理服务器在服务器端,有web站点的所有者负责配置或找人配置
由上面描述如果使用反向代理,我们知道用户浏览器首先访问的代理服务器,真正的数据放在后端的web服务器中,这样的话代理服务器就可以将web服务器反馈的数据给缓存起来,这样用户就下次请求的时候就不用再想web服务器端生成数据了,我们一般以apache,Ngix等作为后端web服务器,代理服务器一般使用Varnish,关于反向代理服务器的配置,这里就不在详述。
反向代理缓存是否可以取代web服务器的动态内容缓存?
这要根据具体情况了,加入你发现他们二者的工作内容相同,那么你可以完全替换掉web动态内容缓存,但是下面几种情况完全可以让两者和睦相处,形成多级缓存。
例如:如果我们站点访问量特别大,我们可能引入多台代理服务器(负载均衡的内容,没了解过的可以看一下我的关于负载均衡的笔记),则每台代理服务器第一次被请求或者缓存过期,都需要向web服务器获取数据,如果web服务器中有动态内容缓存,很好直接就返回了,否则就需要重新计算,假如我们的代理服务器较多,那么web服务器会重复这样的工作,如果我们使用动态内容缓存,那么性能提高一定很可观。
某些公司会墙特定网站,如果你有一个可访问的域名和服务器,就可以通过nginx反向代理来来解决这些问题。比如现在我们用mirror.example.com镜像www.baidu.com,以下是详细操作。