我正在尝试设置一个弹性负载均衡器,以将请求路由到运行Primus.io和 sockjs 的 node.js 服务器集群,以管理实时通信。
我已设置负载均衡器以使用以下配置进行侦听:
- HTTPS 8084 -> HTTPS 8084(我的 node.js 服务器上使用的端口)
- SSL 443 -> TCP 80
我的理解是让 websockets 通过 ELB 工作的唯一方法是通过 SSL-> TCP,因此上述配置。
我已经正确启用了 ELB 的新代理协议,如下所述:
http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/enable-proxy-protocol.html
当尝试从客户端连接到服务器时,最初会发送一个 HTTPS 请求,然后从我可以收集的内容中将它升级到 websockets。但是,当我将请求发送到负载均衡器地址时,请求只是失败了。
如果我将初始 Primus 连接请求发送到单个 nodejs 服务器的 ip,如下所示:
var primus = new Primus('https://ip.address.of.single.server:8084');
请求正确返回并正确升级为 websockets。
当我将 IP 地址切换到平衡器的 IP 地址时,它会失败,并且对 node.js 服务器的初始 https 请求没有返回任何内容。我认为这意味着无法建立 websocket 传输,但老实说,我在这方面的经验很少,所以可能是完全错误的。
有谁知道我做错了什么?
提前致谢