我们有一个 Web 服务器群,目前托管 2 个应用程序 - 两个应用程序都在所有服务器上运行。我们想将其拆分,以便为每个应用程序设置一个专用的服务器群(我们有充分的理由这样做)。
我们希望在所有服务器前面有一个负载均衡器,它可以根据主机名将流量路由到正确的服务器场,但我们希望维护到 Web 服务器的 SSL。
看来我们提供的路由器无法做到这一点。我知道没有 SNI 就不可能做到这一点,但我们希望几乎所有流量都有 SNI 指示器。
现在我是一名程序员,而不是网络人员,但是当新的 SSL 连接请求进入时,路由器无法检查 SNI 标头并路由到正确的服务器场。我假设传入的 SSL 连接由 {源 IP:源端口} 标识,那么它无法记住后续传入数据包的这一点(如果 SNI 仅存在于第一个数据包中)?
据我所知,Haproxy 可以做到这一点,但硬件负载平衡器似乎不这样做。这有什么原因吗?或者这是我们应该推动的事情吗?
(对于在 XP 上使用 IE 且不包含 SNI 的最后一批警卫,我们希望将流量发送到旧服务器场,并在必要时管理到新服务器场的代理)。
答案1
根据其网站,F5 负载均衡器支持 SNI:
https://devcentral.f5.com/articles/ssl-profiles-part-7-server-name-indication
您甚至可以基于 SNI 制作 iRule。
免责声明:
- 我还没有核实他们网站上的说法
- 我不是 F5 的员工,而且 3 年多来我也没有在生产中使用过它。
答案2
路由器不能检查 SNI 标头吗?
路由器通常仅在 OSI 第 3 层工作,即不检查数据包的内容,而只检查目标 IP。对于基于 SNI 的路由,需要了解 TCP 和 TLS,这比仅基于 IP 地址的路由更复杂,成本也更高(就性能而言)。而且这通常也不再称为路由。
Haproxy 可以做到这一点..硬件负载均衡器却不能。
您正在混合路由器(第 3 层)、硬件负载平衡器(第 4 层甚至更高)和 Haproxy(软件负载平衡器)。硬件负载平衡器只不过是一种带有一些软件负载平衡器的设备,可能还有一些用于特定操作的硬件加速。在硬件负载平衡器上,没有任何东西可以固有地使基于 SNI 信息的平衡(而不是路由)变得不可能,就像另一个答案所暗示的那样,有些产品支持这一点。但当然它需要实现,而且会降低性能——你越深入地观察流量,它就越慢。