关闭

反向代理

136人阅读 评论(0) 收藏 举报

1.什么是反向代理

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

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

反向代理方式和包过滤方式或普通代理方式并无冲突,因此可以在防火墙设置网络时使用,正向代理或包过滤方式用于拒绝其他外部访问方式并提供内部网络对外部网络的访问能力。因此可以结合这些方式提供最佳的安全访问方式。

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

如果只有一个服务器,来接受反向代理的请求,总会有瓶颈,这个时候常常采用的方式就是负载均衡,采用多台Web server来接受反向代理的请求,但这样就会产生数据不同步的问题。这是采用proxy+cache。

如果用户访问Web server时,先到proxy_cache,它接到请求时,首先检查本地是否有cache记录,有的话直接从本地返回给用户,当没有记录时,转向后端真正提供服务的web-server提取,当数据返回给用户时,cache会把数据copy一份下来。如果有更新,也先更新在proxy中,再在低负载的时候写入web-server中。<注:这里的资源忽略的动态文件,把资源看做是静态资源>

此外,这样当访问量大时,proxy_cache可以分担一部分请求,不需要后端web-server直接回应。在架构上,后端的web-server可以看作是无限制性的无限扩展,而proxy_cache层也可以是无限的扩展,形成2层架构,实际上proxy层还可以利用不同软件的优势配置成3层甚至4层架构,具有很大的灵活性和扩展性。

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

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

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

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

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



4.同步and异步

Apache和squid的发现会增加后端web的负担,因为每个用户请求都会在proxy上与后端server建立的长久连接,直到数据取完前,连接都不会消失。因为wan速度与lan速度的不同,虽然lan之间的速度是极度快的,但是用户的wan连接决定了这个时间长。

而lighttpd和nginx的异步模式,是不管你用户要求的数据有多大,都是先收下来,再与后端联系,这是非常迅速的速度,所以proxy与后端连接会很短,几十M的东西也是几秒内。后端不需要维护那么多连接。而lighttpd也和nginx不同的异步,lighttpd是先收录完再转向客户浏览器,而nginx是边收数据边转向用户浏览器。

好处

比如客户端网速慢,这样异步与后端建立间接时间可以很短。

又比如,后端服务器重启,同步就会很郁闷,上传会终止,但是异步可以将这种影响减少到最小,而且nginx利用kill –HUP就可以做到不间断重启nginx。

异步传输可以令负载均衡器更有保障,在其它的均衡器(lvs/haproxy/apache等)里,每个请求都是只有一次机会的,就是用户发起一个请求,结果该请求分配的后台服务器刚好挂掉了,那么这个请求就失败了,而nginx因为是异步的,如果分配的服务器挂了或重启,则nginx收到错误后,这个请求可以重启发往下一个后台,下一个后台返回正常数据了,那么这个请求就能够成功了。

如果用户上传的文件过大,nginx有上传大小限制,可以直接拦在nginx了。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:5127次
    • 积分:97
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:2篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档