这篇文章想跟大家再进一步分享一下,我对反向代理及负载均衡的理解。
首先“反向代理”是相对于“正向代理”而言的,有朋友会问这个反向代理到底是怎么个反向法?大家在公司里面,如果公司对于上网管控比较严格的话,通常在内网里是不能通过路由的方式直接上网的,公司的网管会要求你必须设置代理服务器(浏览器或微信客户端网络设置选项里)来访问互联网,可能要需要进行账户密码的验证。所谓代理,就比如你要上www.163.com这个网站,你浏览器的请求并不是直接与163.com去建立连接的,而是跟你的代理服务器去建立连接请求,然后你的代理服务器再代替你去跟www.163.com建立请求连接,最后网站把请求结果的页面返回给代理服务器,代理服务器再把页面返回给你。这种“从内到外”的访问路径,就是正向代理了。
正向代理
那么反向代理就很好理解了,它是相对于正向代理的“从内到外”而言的,反向代理的访问路径则是“从外到内”。反向代理的使用场景通常是,如果你有一台web服务器,想提供互联网用户访问,然后出于安全考虑你不想让你的web服务器直接暴露在公网,又或者你的web服务器不是一台而是几台服务器组成的一个集群,那么这个时候你就会考虑部署反向代理服务器顺便实现对web集群多台服务器的负载均衡。整个访问流程跟正向代理一致,假如你的网站域名是www.aaa.com,当用户通过浏览器访问你这个站点时,实际上是跟你的反向代理服务器建立的三次握手连接,再由反向代理服务器再跟后端的web服务器进行建立请求连接,后端web服务器响应请求结果给反向代理,再由反向代理服务器把结果返回给用户。
反向代理
对于个人理解而言,如果你的代理服务器后端只对应了一台应用服务器,那么这种场景就可以简单的叫做反向代理。而如果你的代理服务器后端配置的是一组多台的服务器集群,那么再结合反向代理服务器的负载均衡算法如轮询、最小连接数、权重等等来分发用户的请求到集群不同的服务器上,那这个就可以叫做负载均衡了。如常见的F5、A10、LVS、HAproxy、Nginx等软硬件产品都是具备负载均衡功能的。
如果公司里面有用F5负载均衡设备的朋友可能清楚,在做VirtualServer配置的时候需要选择模式,常用的有“performance L4”和“Standard”两种。这两种模式的区别就是,performance layer4是四层代理,而Standard是七层代理。那么四层代理跟七层代理又有什么区别呢?下面这2张图可以清楚的展现出来两者的差别:
四层代理模式
七层代理模式
从上图可以看出,四层代理模式,对于负载均衡设备来说,只负责连接的请求转发,不改变TCP连接的任何参数,由客户端与后端服务器自行协商TCP参数。而七层代理模式,则是真正意义上的“代理”模式了,客户端和后端服务器的TCP连接是完全独立的,分别都是与负载均衡设备进行协商。另外一个主要区别就是,四层代理主要是根据IP+PORT来转发的,七层代理则可以根据应用层http的属性来转发,能够更加灵活的处理报文。当然了,七层代理由于是拆开更高层的包来做处理,相对于四层代理来说则会更加的消耗性能。
以上,就是本次分享的内容。