WebSockets 和 HTTPS 负载均衡器

Posted

技术标签:

【中文标题】WebSockets 和 HTTPS 负载均衡器【英文标题】:WebSockets and HTTPS load balancers 【发布时间】:2014-02-12 22:51:03 【问题描述】:

我找不到有关 WSS 如何与 HTTPS 代理和负载平衡器交互的权威信息。

我有一个处理 SSL (SSL off-loading) 的负载平衡器,以及两个包含我的 Web 应用程序并以纯 HTTP 处理请求的 Web 服务器。因此,客户发出 HTTPS 请求,但我的 Web 服务器收到 HTTP 请求,因为负载平衡器负责处理 SSL 证书。

我现在正在开发一个将公开 WebSockets 的应用程序,并且需要 SSL。但是我不清楚当负载均衡器获得 WSS 的安全 HTTPS 握手时会发生什么。

它会像普通握手一样将请求中继到网络服务器吗? WebSocket 使用“Upgrade:WebSocket”HTTP 标头,该标头仅对第一跳有效(因为还有“Connection:Upgrade”,这会不会有问题?

干杯。

【问题讨论】:

【参考方案1】:

负载均衡器通常可以处理 websockets - 还包括 ssl 卸载不应该是一个问题 - 但是你必须配置 LB 来处理 HTTP 而不仅仅是处理基于第 3 层信息的流量 - 因此,您必须确保 LB 必须注意会话状态。

我不知道您使用的是什么 LB - 但是例如使用 F5 LB,您只需分配一个 http 配置文件来负载平衡基于 websocket 的应用程序。 如果您想另外进行 ssl 卸载 - 只需将 ssl 客户端配置文件分配给您的虚拟服务器。 http://support.f5.com/kb/en-us/solutions/public/14000/700/sol14754.html

【讨论】:

那个链接是关于 WS 的,但不是关于 WSS 的。 确实如此,但唯一的区别是通过 SSL 保护通信的加密 - 所以您的配置中的区别只是虚拟服务器上的 ClientSSL 配置文件负责 SSL 卸载。 【参考方案2】:

我原以为终止 SSL 的 LB 也可以处理 WebSocket,但我必须意识到 I was mistaken, once I tried。因此,截至 2013 年 1 月,F5 LB 的答案是:它不起作用。 answer 的要点我在服务器故障时被放弃了:

截至 2012 年 12 月,BIG-IP 不支持 SSL 卸载 WebSocket 流量。

【讨论】:

以上是关于WebSockets 和 HTTPS 负载均衡器的主要内容,如果未能解决你的问题,请参考以下文章

使用 TCP 负载均衡器代理 WebSockets 而没有粘性会话

在 AWS Elastic Load Balancer 后面使用 Primus.io (websockets)

Elastic Beanstalk 在配置菜单中没有负载均衡器设置

用于 HTTP 但不是 WebSockets 的 HAProxy SSL 重定向

Spring WebSockets ActiveMQ convertAndSendToUser

万字长文带你从 0 学习 Keepalived