提问人:Daniel Willems 提问时间:11/16/2023 最后编辑:Daniel Willems 更新时间:11/16/2023 访问量:20
具有 Elastic Beanstalk 和 Classic Load Balancer 499 NGINX 代码的 ActionCable
ActionCable With Elastic Beanstalk and Classic Load Balancer 499 NGINX Code
问:
在过去的 2 天里,这个问题已经丢失了。
我正在尝试在我的 Rails 7.0.4 应用程序中使用 ActionCable,其中与 /cable 的 WebSocket 连接在生产环境中意外关闭。
红宝石 3.0.5
64 位 Amazon 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,需要刷新页面才能看到更新。
我也在控制台中看到了这一点。
在配置中尝试过此操作以允许所有 URL。
config.action_cable.allowed_request_origins = [ %r{http://*}, %r{https://*} ]
- 我增加了 Classic Load Balancer 的粘性。
- 在 80 和 443 上将侦听器更改为 TCP。
- 阅读大约 3 页的 Google 结果。
- 试图从AWS“专家”那里获得帮助(我不得不解释Rails是什么)
没有真正的帮助。关于如何在 Beanstalk 中让这个东西工作的任何建议?
答:
0赞
Max Visser
11/22/2023
#1
499 错误代码似乎指向客户端失去与 nginx 反向代理的连接。我在反向代理的 AWS elastic beanstalk 文档中找到了您。在示例配置中,我看到AWS建议添加超时。
尝试将其添加到您的 nginx conf 中:
keepalive_timeout 60;
这将使连接保持打开 60 秒,如 nginx 文档中所述;
也许这也是:
client_header_timeout 60;
client_body_timeout 60;
希望这会有所帮助。
评论
0赞
Daniel Willems
11/28/2023
谢谢 Max,在尝试了多天后,我最终放弃了,实际上转向了直接在 AWS 上部署的不同方式。当然,一旦我这样做了,一切都很完美。我不确定该设置是否与ELB中的粘性设置相同,后者也根本不起作用。
评论