如何使用HTTPS/SSL获得亚马逊的ELB以使用Web套接字?

Art*_*Art 25 amazon-ec2 websocket node.js amazon-elb

这似乎现在不起作用.我在亚马逊ELB背后使用Faye和NodeJS.当我打开HTTPS时,连接无法再进行中断.我发现这里的问题没有答案:https://forums.aws.amazon.com/message.jspa? messageID = 283293.有人能够让这个工作吗?在运行我自己的HAProxy实例之外是否有任何工作?

Ale*_*one 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/


Jam*_*tle 10

它不起作用,ELB的HTTP(S)代理至少现在不理解websocket请求,我不知道何时/是否有计划.

我不确定HAProxy是否完全必要.应该可以将SSL终结器(例如stud/stunnel)放在与nodejs服务器相同的实例上并通过这种方式.然后,您可以保留ELB,但将其置于TCP模式.

显然每个实例都有SSL开销,但从长远来看,可能比将SSL卸载到ELB更好(特别是基于用户对ELB SSL性能的评论).