谷歌HTTP负载平衡器无法升级的Web Socket连接

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谷歌HTTP负载平衡器无法升级的Web Socket连接相关的知识,希望对你有一定的参考价值。

我只是增加了一个HTTP负载平衡器指着一对夫妇运行龙卷风网络服务器谷歌Compute Engine的实例。特别是,他们正在处理的WebSockets。

当我访问一个网页,嵌入式的WebSocket通过负载均衡器(Chrome浏览器)我得到:

Error during WebSocket handshake: Unexpected response code: 400

这是通过DNS以及击球负载平衡器的IP。

然而,当我打了一个单独的实例,我能够成功地握手的WebSocket。

当我通过负载均衡器获取的页面,我没有看到在任何Web服务器日志400,这进一步表明它是不会让它通过负载均衡。

有什么我可以做,以使HTTP“升级”?还是在云平台HTTP负载平衡器这是不可能。

编辑:我还可以通过“网络负载平衡器”握手WebSocket的,因此,所有的迹象都指向HTTP负载平衡器是问题。

答案

截至今天(2015年7月)的,GCP的HTTP LB和AWS的ELB不支持WebSockets的。

对GCP的解决方法是使用网络负载平衡器(https://cloud.google.com/compute/docs/load-balancing/network/)。

对于ELB的解决方法是使用TCP / SSL,而不是HTTP / HTTPS。

另一答案

尝试建立负载平衡器使用TCP或SSL,而不是HTTP或HTTPS。我正在对AWS负载平衡器同样的问题,即开关似乎解决问题。我怀疑是HTTP设置过滤其中的WebSocket需要一些数据包。

另一答案

你的实例显示在LB健康吗?如果是这样的话,你可以做一个tcpdump的,看你的实例是如何回答后面的LB和直接。确保后面的LB的IP响应从你的到来实例的公网IP,而不是私有IP。

如果它是不健康的,那么你需要仔细检查的情况下,确保TCP连接正确关闭每次。

另一答案

这现在已经得到解决(2017年)https://cloud.google.com/load-balancing/docs/https/#websocket_proxy_support应该要求在你的最终不改变使用。

以上是关于谷歌HTTP负载平衡器无法升级的Web Socket连接的主要内容,如果未能解决你的问题,请参考以下文章

如何使 HTTP 调用到达 App Engine 负载平衡器后面的所有实例?

WebSockets 和 HTTPS 负载均衡器

为啥我在 gcloud 中设置 http 负载均衡器时无法选择我创建的托管实例组?

Maglev -- 谷歌的负载均衡器

介绍Sidekick-高性能负载均衡器

通过动态 url 参数负载平衡 websocket 连接