【问题标题】:Firebase connection with multiple Node.js behind AWS/ALB load balancer and NginxFirebase 与 AWS/ALB 负载均衡器和 Nginx 后面的多个 Node.js 的连接
【发布时间】:2018-02-04 15:47:58
【问题描述】:

我需要将 Firebase 连接到 AWS/Elastic Beanstalk 上的节点设置。有 1-4 个节点服务器,在 ALB 负载均衡器和 Nginx 代理后面。 Firebase 使用 WSS 协议(因此需要 ALB,因为常规 ELB 不支持套接字)。当 Node 实例通过 Firebase 进行身份验证时,它会获得一个应用程序可以侦听的套接字。

我的问题:既然可能有任何 Node 服务器与 Firebase 通信,那么如何使套接字保持粘性,以便无论哪个 Node 服务器打开套接字,它都是每次通信的正确套接字?

谢谢!

ZE

【问题讨论】:

    标签: node.js sockets amazon-web-services firebase nginx


    【解决方案1】:

    您可以在 AWS ALB 中启用 Sticky sessions 以使 WSS 协议在一段时间内正常工作并将流量发送到同一 EC2 实例。

    另请注意,您需要在目标组级别配置粘性。

    我创建了一个启用粘性的第二个目标组调用“xxxSocket”, 并让第一个目标组“xxxHTTP”没有粘性 (默认)。最后,在我的 Application Load Balancer 中,我添加了一个新的 规则让“路径模式”= /socket.io 然后路由到目标组 “xxxSocket”,将默认模式路由留给“xxxHTTP”。

    参考:AWS Forum Anyone gotten the new Application Load Balancer to work with websockets?

    此外,WebSockets 连接本身就是粘性的。

    WebSockets 连接本质上是粘性的。如果客户端请求 连接升级到 WebSockets,返回 HTTP 101 的目标 接受连接升级的状态码是在 WebSockets 连接。 WebSockets 升级完成后, 不使用基于 cookie 的粘性。

    参考:Target Groups for Your Application Load Balancers

    【讨论】:

    • 感谢 Ashan,根据您的说明,我查找了 AWS 目标组,确实我的 ALB 目前没有目标组,但目标组文档中还有其他内容:它说“WebSockets 连接本质上是sticky. 如果客户端请求升级到 WebSockets 的连接,返回 HTTP 101 状态码接受连接升级的目标是 WebSockets 连接中使用的目标,WebSockets 升级完成后,不使用基于 cookie 的粘性。 "
    • 您能否也分享参考链接,以便我可以更新答案?
    • 用您的信息和参考更新了答案。谢谢@zi88
    • 感谢您的回答。在 ALB 侦听器中定义规则到端口 3000 后的一个查询,我如何在 url 上也显示端口(如“example.com:3000"”)。我使用的是 socket.io 2.1.1,它正在工作(如“@987654326” @) 定义了 ALB 规则路径,但我希望显示为“example.com:3000”。知道我怎么能做到这一点吗?帮助将不胜感激。谢谢!
    猜你喜欢
    • 2021-08-20
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 2017-11-14
    • 1970-01-01
    相关资源
    最近更新 更多