リアルタイム通信を管理するために、Sockjs を使用してPrimus.ioを実行している node.js サーバーのクラスターにリクエストをルーティングするように、エラスティック ロード バランサーをセットアップしようとしています。
次の構成でリッスンするようにロードバランサーをセットアップしました。
- HTTPS 8084 -> HTTPS 8084 (node.js サーバーで使用されるポート)
- SSL 443 -> TCP 80
私の理解では、websocket を 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 転送を確立できなかったことを意味すると思いますが、正直なところ、この分野での経験はほとんどないため、完全に間違っている可能性があります。
誰かが私が間違っていることを知っていますか?
前もって感謝します