我试图让我的websockets使用Amazon Web Service和Elastic Beanstalk(ELB)。
我根据以下内容设置了代理协议: http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/enable-proxy-protocol.html
我已为所有IP上的所有端口上的负载均衡器和其他安全组打开了所有入站流量。
我还将负载均衡器listerner保留为端口80上的HTTP。
尝试在端口80上连接时,我的websocket连接出现以下错误: 失败:WebSocket握手期间出错:意外的响应代码:400
端口8080上出现此错误: 失败:连接建立错误:net :: ERR_CONNECTION_REFUSED
我很感激建议,我现在陷入困境。
谢谢!
答案 0 :(得分:5)
配置EC2安全组后,您的应用程序将使用公共IP。
但您仍然会遇到使用EB网址的问题。 要解决此问题,您必须更改EB配置。
现在您可以点击EB网址。
答案 1 :(得分:2)
AWS推出了支持Web套接字的新Application Load Balancer。将您的ELB更改为应用程序负载均衡器,这将解决您的问题。
https://aws.amazon.com/blogs/aws/new-aws-application-load-balancer/
答案 2 :(得分:2)
您应该为Nginx服务器创建反向代理。您可以在.ebextensions文件夹中包含此config file以使Nginx支持WS。
同样在EBS的负载均衡器配置中,将协议从HTTP更改为TCP。
请参阅此blog以设置安全的WebSocket。
答案 3 :(得分:1)
我也在寻找这个问题的可能解决方法,但无论您使用什么平台语言在AWS EC2上开发websocket程序都很容易,因为在我的情况下使用Node.js nginx,这个应该适用于所有支持平台。
配置安全组
注意:如果某些内容无效,请查看"事件"在Beanstalk应用程序/环境中选项卡,找出问题所在。
答案 4 :(得分:0)
这是一篇非常古老的文章,但是在寻找答案之后,我发现需要做两件事才能在与AWS EB一起使用的自定义端口上获取Websocket。
在您的EB环境的配置下。转到软件并在其中添加环境变量。确保这与您的代码区分大小写。
再次在您的EB环境的配置下。转到Load Balancer并将自定义端口添加为侦听器。
确保将新的侦听器保存在配置下,并在重新加载时将其路由到自定义端口上的网络套接字流量