带有 Elastic Beanstalk 和经典负载均衡器的 ActionCable 499 NGINX 代码

问题描述 投票:0回答:1

我尝试在 Rails 7.0.4 应用程序中使用 ActionCable 和 Turbo Stream,其中与 /cable 的 WebSocket 连接在生产环境中意外关闭。

红宝石3.0.5

64位亚马逊Linux 2/3.6.3

使用 Turbo Streams 和 OpenAI 实现此聊天

https://gist.github.com/alexrudall/cb5ee1e109353ef358adb4e66631799d

开发过程中不会出现此问题,一切都运行良好。

Redis 电缆配置

production:
  adapter: redis
  url: <%= "redis://#{ENV.fetch('REDIS_HOST', 'localhost')}:6379/1"%>
  channel_prefix: fist_bump_production

REDIS_HOST 是 AWS Elasticache 服务端点,并已测试该端点适用于 Sidekiq。

首先,我在使用 /cable 的生产中遇到了 404 问题,但后来我将其添加到配置中。

location /cable {
  proxy_pass http://my_app;
  proxy_http_version 1.1;
  proxy_set_header Upgrade websocket;
  proxy_set_header Connection "upgrade";
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

不再有 404,但后来我开始收到 499,需要刷新页面才能看到更新。

我也在控制台中看到了这一点。

已在配置中尝试过此操作以允许所有网址。

config.action_cable.allowed_request_origins = [ %r{http://*}, %r{https://*} ]
  • 我增加了 Classic Load Balancer 的粘性。
  • 将 80 和 443 上的侦听器更改为 TCP。
  • 阅读大约 3 页的 Google 结果。
  • 尝试从AWS“专家”那里获得帮助(我必须解释Rails是什么)

没有真正的帮助。关于如何让这个东西在 Beanstalk 中工作有什么建议吗?

ruby-on-rails amazon-web-services nginx amazon-elastic-beanstalk actioncable
1个回答
0
投票

499 错误代码似乎表明客户端与 nginx 反向代理失去了连接。我在 AWS elastic beanstalk 文档中查找了您的反向代理。在示例配置中,我看到 AWS 建议添加超时。

尝试将其添加到您的 nginx 配置中:

      keepalive_timeout     60;

这将使连接保持打开状态 60 秒 如 nginx 文档中所述

也许这也是:

      client_header_timeout 60;
      client_body_timeout   60;

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.