目录:

1:什么是反向代理

2:prixy_cache用于架构中的优势

3:常用的反向代理有哪些?

4:反向代理的设置

 

1:什么是反向代理-----------------------------------------------

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

    通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。由于外部网络上的主机并不会配置并使用这个代理服务器,普通代理服务器也被设计为在Internet上搜寻多个不确定的服务器,而不是针对Internet上多个客户机的请求访问某一个固定的服务器,因此普通的Web代理服务器不支持外部对内部网络的访问请求。当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。此时代理服务器对外就表现为一个Web服务器,外部网络就可以简单把它当作一个标准的Web服务器而不需要特定的配置。不同之处在于,这个服务器没有保存任何网页的真实数据,所有的静态网页或者CGI程序,都保存在内部的Web服务器上。因此对反向代理服务器的攻击并不会使得网页信息遭到破坏,这样就增强了Web服务器的安全性。   反向代理方式和包过滤方式或普通代理方式并无冲突,因此可以在防火墙设备中同时使用这两种方式,其中反向代理用于外部网络访问内部网络时使用,正向代理或包过滤方式用于拒绝其他外部访问方式并提供内部网络对外部网络的访问能力。因此可以结合这些方式提供最佳的安全访问方式。

2:反向代理用于架构中的优势-----------------------------------

   大家可以如上面图片所见,反向代理实际上就是一台服务器,充当后端真正服务的主机,提供服务。工作流程如下(参照图片): A,B,C三台用户的主机,分别访问 www.mycompany.com 的网页,按照一般传统和很正常的流程肯定是host-A http请求------->www.mycompany.com WEB server ,接着webserver回应请求,从网页根目录下或者数据库中提取数据(html,jpg,css,js),返回到host-A。同理,B,C的一次访问网页流程也是一样。但是毕竟多强大的服务器总有瓶颈,当用户的访问量到达一定程度时,服务器总会有撑不住的时候,这个时候负载均衡就是一种比较好的办法。

(细节:服务器性能限制产生原因:提供服务程序的软件先天设计,网络带宽,磁盘I/O,CPU或内存使用率,系统的设计)

还是参照上图,把图倒转来看就是传统的负载均衡。把webserver看作client,把A,B,C看作是web server,而proxy_cache就是负载均衡器。这里又会衍生一个问题,多台web server时,就会产生数据不同步问题。这里简单说明一下,假设某用户访问网站,刚好这时调度到A-web server上,它上传了照片或者更新了日志。当她隔了一天再次访问此网站时,调度到了B-web server上,这个时候,由于她在A上上传的图片,所以,在B-server上就会发现上传的东西不见了,这样就会产生问题。这个时候,proxy+cache就是显示实力的时候。继续参照上述图片

流程:当A,B,C三台client访问www.mycompany.com WEB server时,首先请求是先到proxy_cache的,proxy_cache接到请求时,首先检查本地是否有cache记录,有的话就直接从本地返回送给用户,当没有记录时,转向后端真正提供服务的web-server提取,当数据返回给用户时,cache也会把数据copy一份下来。这样,当后端有多台web-server,管理员每次更新的时候都是更新其中一台,用户也不会发生遇到数据不同步现象,因为,proxy_cache会有机制去确保多台后端主机的响应是正确的,当从其中获取到用户需要的数据时,会保存在本地,所以,当不同用户需要这个数据时都能获取得到。而后台的数据同步,不需要每时每刻,只有在某个低负载时间时,执行一下即可,因为proxy_cache里面已经能有确保用户都能访问的正常数据。

(细节-1:这里暂时忽略动态文件,jsp,asp,php,net等的讨论,把资源看作是静态资源)

   用proxy_cache时,还有另外的一个好处,当访问量大时,proxy_cache可以分担一部分请求,不需要后端web-server直接回应。在全局cache的同时,还可以看作是负载均衡中的一部分,后端的web不需要处理大量的请求,从而导致性能问题。所以在架构上,后端的web-server可以看作是无限制性的无限扩展,而proxy_cache层也可以是无限的扩展,行成2层架构,实际上proxy层还可以利用不同软件的优势配置成3层甚至4层架构,具有很大的灵活性和扩展性。所以一般国内的大型SNS网站如豆瓣或者新浪网,开心网等都是采用了这种形式的多层架构。

参考:http://axislover.blog.163.com/blog/static/10776515200821911137520/

 

3:常用的反向代理有哪些?----------------------------------------------------

一般较为常用的反向代理有:apache,lighttpd,nginx,以及squid

apache 的mod_proxy 基于设计问题,在性能上表现很一般,一般是很少人会使用

squid是专门的proxy软件,其在正向代理的领域表现比较强劲,在反向代理方面也有不错的表现,国内用有不少大型网站使用其作为web-server的前端

lighttpd和nginx:轻量级的web-server和proxy,其轻量级的特性,对系统资源的要求非常的小,并且能承担的并数远远在如iis,apache等web的巨无霸,一般用在最前端去充当第一层的请求是非常好用的,架构中使用这2个轻量级别的proxy数量在急剧上升。

 

4:反向代理的设置------------------------------------------------------------

apache不作讨论,因为其性能实在不敢苟同

squid:

lighttpd:http://troyhector.blogbus.com/logs/70058093.html 

nginx:

posted on 2010-12-19 09:25  TroyHector  阅读(1157)  评论(0编辑  收藏  举报