无法连接到 Elastic Beanstalk 上的 ActionCable

Posted

技术标签:

【中文标题】无法连接到 Elastic Beanstalk 上的 ActionCable【英文标题】:Unable to connect to ActionCable on Elastic Beanstalk 【发布时间】:2016-11-09 04:20:18 【问题描述】:

我正在尝试在运行 nginx 和 Puma 的 Elastic Beanstalk 上部署带有 ActionCable 的 Rails 5.0 应用程序。

.ebextensions/nginx.config 我有以下内容:

location /cable proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade websocket; proxy_set_header Connection upgrade;

config/environments/production.rb

config.action_cable.allowed_request_origins = [ 'http://####.####.com', /http:\/\/####.*/ ]

将应用程序部署到 Elastic Beanstalk 环境后,我最终在 Chrome 控制台中出现此错误:

到 'ws://####.####.com/cable' 的 WebSocket 连接失败:在建立连接之前 WebSocket 已关闭。

我已尝试遵循 this thread 中的建议,但最终却收到此错误:

与“ws://####.####.com/cable”的 WebSocket 连接失败:WebSocket 握手期间出错:意外响应代码:404

这就是我的.ebextensions/nginx.config 文件目前的样子。

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

原来连接在 Elastic Load Balancer 处被终止。 ELB 监听器被设置为 HTTP 并且需要是 TCP。

【讨论】:

您介意分享一些其他信息吗?在线:proxy_passhttp://backend;我应该换成http://my_backend_host_etc.com 吗? @PaspRuby 用于我的设置我在nginx.conf 中有这个:upstream backend server unix:///var/run/puma/my_app.sock; 所以proxy_pass 行引用该上游值并直接指向正在运行的 puma 服务器 我遇到了同样的问题,得到WebSocket connection to 'ws://####.####.com/cable' failed: Error during WebSocket handshake: Unexpected response code: 404@MarceloAlves 的听众你有什么?我有这个:监听器 1:端口 80 HTTP,实例端口 80 实例协议 HTTP;监听器 2:端口 443 HTTPS,实例端口 80 实例协议 HTTP。 @Jack 你好。不幸的是,我们很久以前就停止使用 websockets 并升级到更新的应用程序负载均衡器,它将侦听器重置为 HTTP。我相信为了让 websockets 在 Classic LB 上工作,它需要设置为 TCP

以上是关于无法连接到 Elastic Beanstalk 上的 ActionCable的主要内容,如果未能解决你的问题,请参考以下文章

无法连接到使用 Elastic Beanstalk 创建的 RDS 实例

无法从 Elastic Beanstalk Docker 连接到 RDS

AWS Elastic Beanstalk Worker 无法连接到 SQS

无法通过 Python Elastic Beanstalk 中的 Flask SQLAlchemy URI 连接到 AWS MySQL RDS 实例

Amazon AWS Elastic Beanstalk - 连接到 mongodb

当我将 Spring Boot 应用程序部署到 AWS Elastic Beanstalk 并且无法从本地 Spring Boot 连接到 RDS 时出现 502 错误网关