目录:
1:什么是反向代理
2:prixy_cache用于架构中的优势
3:常用的反向代理有哪些?
4:反向代理的设置
1:什么是反向代理-----------------------------------------------
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: