谷歌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 负载平衡器后面的所有实例?