【问题标题】:Websockets with socket.io on AWS Elastic BeanstalkAWS Elastic Beanstalk 上带有 socket.io 的 Websocket
【发布时间】:2013-04-01 04:47:28
【问题描述】:

我正在尝试在 AWS Elastic Beanstalk 上使用 socket.io 设置一个 websocket-server。启动并运行了对 /socket.io/1/?t=xxxx 的初始请求,但 websocket 握手失败并出现以下错误:

WebSocket connection to 'ws://xxxxxx.elasticbeanstalk.com/socket.io/1/websocket/a4DTCN2BeJZuiSaphVyz' failed: Unexpected response code: 502 

通过谷歌搜索并查看错误 502 (Bad Gateway),它似乎与 nginx-proxy 有关。那么如何配置 nginx 以使用 websockets 呢?

在 AWS 文档中找不到任何关于设置 websockets 的内容。

【问题讨论】:

  • 通过将代理从 nginx 更改为 none 使其工作。
  • 我也看到了同样的问题报告(可怕的)“WebSocket 握手期间的错误:意外的响应代码:400”

标签: websocket amazon-elastic-beanstalk


【解决方案1】:

你可以尝试通过配置nginx的麻烦,但如果你只使用websockets,关闭所有代理并直接连接会更容易。

这是在弹性 beantalk 仪表板中的应用环境下。右侧有一个下拉按钮,标记为“操作”。选择“编辑/加载配置”

【讨论】:

  • 截至 2014 年 4 月 13 日,它位于://配置/软件配置/容器选项。
  • “更简单”是否也意味着更好?比如,通过将代理服务器设置为 nginx 会得到什么(除了静态文件映射和 gzip 压缩,这两个我都不需要)。性能和安全性如何?我怀疑没有代理服务器的性能会更好。但是,安全呢? nginx 是否更适合 WSS(基于 SSL/TLS 的 WebSockets),还是我应该只实现 SSL with Node.js? DoS 保护呢?还有什么?
  • 我已关闭代理服务器,但我收到错误连接在建立之前已关闭,问题发布在这里:stackoverflow.com/questions/26880396/…
  • 我认为接受的答案应该包括一个不关闭 nginx 的解决方案。
  • 为了让它工作,我还必须更新负载均衡器以使用 tcp。 github.com/socketio/socket.io/issues/1846#issuecomment-61038664
【解决方案2】:

ditch-nginx 方法有一个明显的缺点。您必须将 https 移至节点以及您的 socket.io 调用。在服务器配置中而不是在节点中管理 https 要容易得多。

如果您不需要 https,我建议转储代理并直接转到节点。

【讨论】:

  • 这个不对,可以直接在负载均衡器上添加证书。
【解决方案3】:

Socket.io 默认使用端口 8080。通过在 AWS 管理 > EC2 > 安全组中添加“入站 > 自定义 TCP 规则”,确保在您的 EC2 安全组上启用端口 8080。

【讨论】:

    猜你喜欢
    • 2013-08-29
    • 2019-06-30
    • 2015-02-10
    • 2017-10-03
    • 2020-09-28
    • 1970-01-01
    • 2017-06-06
    • 2015-09-26
    • 2014-08-03
    相关资源
    最近更新 更多