关于ssl,本地会话和负载平衡,我有很多问题似乎相互关联,因此对于这个问题的长度,我事先表示歉意。
我有一个使用基于文件的会话的网站。该站点的性质是,大多数站点是http,但是某些部分是ssl。当前,由于基于文件的会话,任何ssl请求都必须与以前的http请求命中同一台服务器。
由于时间限制,我想做最简单的事情来平衡增加的http和ssl流量。
粘性负载平衡算法似乎有2个选择:
- 基于IP
- 基于cookie
基于ip的解决方案可能会起作用,但是当服务器关闭或添加服务器时,哈希算法可能会更改用户访问的服务器,这在当前基于文件的会话设置中是不希望的。我还假设用户在浏览网站时合法地更改ips在技术上是可能的。
基于cookie的算法似乎更好,但是用ssl加密时无法检查cookie似乎存在其自身的问题。
我一直在搜索有关如何对ssl进行负载平衡的示例,但似乎找不到任何可以进行基于cookie的负载平衡并且可以通过添加另一个ssl解码器来处理增加的ssl负载的设置的显式示例。
我见过的大多数显式示例在浏览器客户端和负载平衡器之间都装有ssl解码器(通常是硬件,apache_mod_ssl或nginx)。这些示例通常看起来像这样(从http://haproxy.1wt.eu/download/1.3/doc/architecture.txt修改):
192.168.1.1 192.168.1.11-192.168.1.14 ------- + ----------- + ----- + ----- + ----- + | | | | | +-+-+ +-+-+ +-+-+ +-+-+ +-+++ | LB1 | | A | | B | | C | | D | + ----- + + --- + + --- + + --- + + --- + apache 4廉价的网络服务器 mod_ssl hapoxy
上面示例中的ssl解码部分似乎是无法水平扩展的潜在瓶颈。
我看过haproxy,它似乎有一个'mode tcp'选项,它将允许这样的事情,这将允许您有多个ssl解码器:
hapoxy | ------------- | | ssl-decoder-1 ssl-decoder2 | | ------------------- | | | web1 web2 web3
但是,在这种设置中,由于haproxy不会解码ssl,因此您似乎会丢失客户端ip:https ://cloud-support.engineyard.com/discussions/problems/335-haproxy-not-passing-x-forwarded -对于
我也看过nginx,也没有看到任何水平可扩展ssl解码器的显式示例。似乎有许多人将nginx视为潜在瓶颈的例子。至少这个环节似乎表明,即使nginx的不具有的选项HAProxy的类似设置,你会被说,nginx的“不支持透明地经过TCP连接到后端”失去了IP 如何通过阿帕奇通过Nginx代理的SSL流量?。
问题:
- 为什么似乎没有更多设置增加更多ssl解码器以应对流量增加的设置示例?
- 是因为ssl解码步骤只是一个理论上的瓶颈,实际上,除了流量荒谬的站点外,一个解码器就足够了吗?
- 想到的另一种可能的解决方案是,可能对ssl需求增加的任何人也都具有集中化的会话存储,因此客户端在顺序请求上访问哪个Web服务器都没有关系。然后,您可以在每个Web服务器上启用mod_ssl或等效功能。
- 上面提到的haproxy解决方案似乎可行(除了客户端IP问题),但是没有人遇到基于粘性cookie的软件负载平衡器解决方案,该解决方案可以通过在保留客户端IP的同时增加解码器的数量来工作,或者在技术上可能不可行可能的(因为您必须对请求进行解码才能获得客户端IP,在这种情况下,我们存在解码器瓶颈)。
假设我所说的一切都是正确的,这些似乎是我的选择:
- 使用ip哈希(对于可能合法更改ip的用户以及服务器添加和删除方案不利)
- 使用nginx或mod_ssl作为第一个处理ssl请求的程序,这将是潜在的ssl解码瓶颈
- 使用haproxy作为第一个处理ssl请求的程序,获得了水平的ssl可伸缩性,但是在ssl请求的网络服务器级别上没有记录任何ips(可能暂时正常)
- 从长远来看,请转向移动或集中式会话存储,从而无需进行粘性会话