使用 AWS 和 Elastic Beanstalk 的 Websocket

Posted

技术标签:

【中文标题】使用 AWS 和 Elastic Beanstalk 的 Websocket【英文标题】:Websockets with AWS and Elastic Beanstalk 【发布时间】:2015-02-10 17:16:09 【问题描述】:

我正在尝试让我的 websocket 与 Amazon Web Service 和 Elastic Beanstalk (ELB) 一起使用。

我根据以下设置代理协议: http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/enable-proxy-protocol.html

我已经在所有端口上为所有 IP 开放了到我的负载均衡器和其他安全组的所有入站流量。

我还将负载平衡器侦听器保留为端口 80 上的 HTTP。

尝试连接端口 80 时,我的 websocket 连接出现以下错误: 失败:WebSocket 握手期间出错:意外响应代码:400

端口 8080 上出现此错误: 失败:连接建立错误:net::ERR_CONNECTION_REFUSED

不胜感激,我被困在这一点上。

谢谢!

【问题讨论】:

你找到解决办法了吗,我也遇到了同样的问题 github.com/Automattic/socket.io/issues/1846 在使用 HTTP 侦听器进行设置时,Amazon 的弹性负载均衡器目前似乎不支持 Web 套接字。建议的解决方法是使用基于 TCP 的侦听器。请参阅上面的链接。 您是否知道如果没有负载均衡器这是否可行?例如,只有一个实例的 EB 应用程序? 然后用单个实例创建一个负载均衡器 ;) 【参考方案1】:

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

    在你的EB环境配置下。转到软件并在那里添加一个环境变量。确保这与您的代码匹配区分大小写。

    再次在您的 EB 环境的配置下。转到负载均衡器并将自定义端口添加为侦听器。

确保将新的侦听器保存在配置下,并在重新加载时将 websocket 流量路由到自定义端口

【讨论】:

【参考方案2】:

您应该为 nginx 服务器创建反向代理。您可以在 .ebextensions 文件夹中包含此 config file 以使 Nginx 支持 WS。

此外,在 EBS 的负载平衡器配置中,将协议从 HTTP 更改为 TCP。

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

【讨论】:

我有一个带有 WebSocket 的 java 应用程序我该如何配置。【参考方案3】:

AWS 推出了支持 Web 套接字的新应用程序负载均衡器。将您的 ELB 更改为 Application Load Balancer,这将解决您的问题。

https://aws.amazon.com/blogs/aws/new-aws-application-load-balancer/

【讨论】:

【参考方案4】:

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

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

    转到 EB 环境页面 配置 在负载平衡部分将协议从 HTTP 更改为 TCP。

现在您可以点击 EB URL。

【讨论】:

您是否知道如果没有负载均衡器这是否可行?例如,只有一个实例的 EB 应用程序?【参考方案5】:

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

配置安全组

    在 AWS 控制台中,打开 EC2 选项卡。 选择相关区域并点击安全组。 你应该有一个 elasticbeanstalk-default 安全组,如果你 已在该区域为您启动了 Elastic Beanstalk 实例 应用程序。 点击顶部的操作按钮,然后选择编辑入站规则。 在此处类型列中选择所有 TCP,或者您可以设置一些自定义 TCP 规则以及监听你的 websocket 端口。 就是这样!

注意:如果出现问题,请检查 Beanstalk 应用程序/环境中的“事件”选项卡并找出问题所在。

【讨论】:

以上是关于使用 AWS 和 Elastic Beanstalk 的 Websocket的主要内容,如果未能解决你的问题,请参考以下文章

使用 AWS CodeBuild 和 EB CLI 部署到 AWS Elastic Beanstalk

如何知道我是不是需要使用 AWS Elasticache 和 AWS Elastic Load Balancing?

如何使用 aws cli 在 Elastic Beanstalk 上上传和部署?

AWS Elastic Beanstalk 使用 PHP 和私有 Composer 存储库

AWS 和 Elastic Beanstalk

AWS Elastic Beanstalk 和每当 Gem