具有AWS和Elastic Beanstalk的Websockets

时间:2014-12-12 02:56:28

标签: amazon-web-services websocket amazon-elb

我试图让我的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

我很感激建议,我现在陷入困境。

谢谢!

5 个答案:

答案 0 :(得分:5)

配置EC2安全组后,您的应用程序将使用公共IP。

但您仍然会遇到使用EB网址的问题。 要解决此问题,您必须更改EB配置。

  1. 转到EB环境页面
  2. 配置
  3. 在负载平衡部分,将协议从HTTP更改为TCP。
  4. 现在您可以点击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。

enter image description here

请参阅此blog以设置安全的WebSocket。

答案 3 :(得分:1)

我也在寻找这个问题的可能解决方法,但无论您使用什么平台语言在AWS EC2上开发websocket程序都很容易,因为在我的情况下使用Node.js nginx,这个应该适用于所有支持平台。

配置安全组

  1. 在AWS控制台中,打开EC2选项卡。
  2. 选择相关区域,然后单击安全组。
  3. 如果你有弹性豆秆默认安全组,你应该有 已经在该区域为您启动了一个Elastic Beanstalk实例 应用
  4. 点击顶部的“操作”按钮,然后选择“编辑入站规则”。
  5. 此处在Type列中选择All TCP,或者您可以设置一些Custom TCP 规则也要听你的websocket端口。

    那就是它!
  6. 注意:如果某些内容无效,请查看"事件"在Beanstalk应用程序/环境中选项卡,找出问题所在。

答案 4 :(得分:0)

这是一篇非常古老的文章,但是在寻找答案之后,我发现需要做两件事才能在与AWS EB一起使用的自定义端口上获取Websocket。

  1. 在您的EB环境的配置下。转到软件并在其中添加环境变量。确保这与您的代码区分大小写。

  2. 再次在您的EB环境的配置下。转到Load Balancer并将自定义端口添加为侦听器。

确保将新的侦听器保存在配置下,并在重新加载时将其路由到自定义端口上的网络套接字流量