现在似乎没有用。我在亚马逊ELB背后使用Faye和NodeJS。当我打开HTTPS时,连接无法再进行中断。我在这里找到了一个未回答的问题:https://forums.aws.amazon.com/message.jspa?messageID=283293。有人能够让这个工作吗?在运行我自己的HAProxy实例之外还有其他工作吗?
答案 0 :(得分:42)
根据我们自己的测试,我确认在TCP / SSL上配置ELB,而不是HTTP / HTTPS,可以通过WebSockets实现。缺点是两个:
1)正如arturnt已经指出的那样,你无法获得粘性。
2)您将无法检索客户端的身份。 WebSocket服务器看到的原始IP将始终是ELB,并且与HTTP / HTTPS配置不同,不会向请求添加X-Forwarded-For标头。
2013年7月更新 :亚马逊刚刚添加了对代理协议的支持,解决了上述第2个缺点。使用代理协议,即使ELB工作在TCP级别而不是HTTP,也会添加包含客户端原始IP的标头。完整详情:http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/enable-proxy-protocol.html
2016年8月更新 :亚马逊刚刚发布了新的 AWS Application Load Balancer ,它支持第7层的WebSocket(以及HTTP / 2.0和基于内容的路由)。见https://aws.amazon.com/it/blogs/aws/new-aws-application-load-balancer/
答案 1 :(得分:10)
它不起作用,ELB的HTTP(S)代理至少现在不理解websocket请求,我不知道何时/是否有计划。
我不确定HAProxy是否完全必要。应该可以放置SSL终结器,例如stud / stunnel,与nodejs服务器在同一个实例上并通过这种方式传递。然后,您可以保留ELB,但将其置于TCP模式。
显然每个实例都有SSL开销,但从长远来看,可能比将SSL卸载到ELB更好(特别是基于用户对ELB SSL性能的评论)。
答案 2 :(得分:4)
在詹姆斯回答之后,我做了一些研究并最终进入TCP路线,不确定使用ELB的HTTP隧道(考虑到我不需要粘性)存在任何缺点。好处是你不需要做螺柱/ stunnel,因为ELB为你提供。所以NodeJS / Faye正在侦听端口8000的最终ELB设置:
Secure TCP Forward (443) -> Local (8000)
TCP Forward 80 -> Local(8000)
答案 3 :(得分:1)
您可以使用Application LB来很好地支持websocket。我在ALB上实施了一些技巧之后,就在我们的最新项目中实现了这个想法:
Watch
Visual Studio