web-dev-qa-db-ja.com

HTTPS / SSLを使用するAmazonのELBをWebソケットで使用するにはどうすればよいですか?

現在、これは機能していないようです。 Amazon ELBの背後にあるNodeJSでFayeを使用しています。 HTTPSをオンにすると、接続を仲介できなくなります。ここで未回答の質問が見つかりました: https://forums.aws.Amazon.com/message.jspa?messageID=28329 。これを機能させることができる人はいますか? HAProxyの独自のインスタンスを実行する以外に回避策はありますか?

25
Art

私たち自身のテストに基づいて、HTTP/HTTPSの代わりにTCP/SSLでELBを構成すると、WebSocketsでトリックができることを確認しました。欠点は2つあります。

1)arturntですでに指摘されているように、粘り気を得ることができません。

2)クライアントのIDを取得する機能を失います。 WebSocketサーバーによって認識される元のIPは常にELBであり、HTTP/HTTPS構成とは異なり、X-Forwarded-Forヘッダーはリクエストに追加されません。

UPDATE 2013年7月:AmazonはProxyのサポートを追加しましたプロトコル、上記の2番目の欠点を解決します。 Proxy Protocolを使用すると、ELBがHTTPではなくTCPレベルで機能する場合でも、クライアントの元のIPを含むヘッダーが追加されます。詳細: http://docs.aws。 Amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/enable-proxy-protocol.html

UPDATE 2016年8月:Amazonが新しいAWSアプリケーションを発表しましたロードバランサー、レイヤー7のWebSocket(およびHTTP/2.0とコンテンツベースのルーティング)をサポートします。 https://aws.Amazon.com/it/blogs/aws/new-aws-application-load-balancer/ を参照してください

42

Jamesの回答の後、私はもう少し調査を行い、最終的にTCPルートに行きましたが、ELBのHTTPトンネリングを使用することの不利な点があるかどうかはわかりません(私がELBがそれを提供するので、スタッド/スタンネルを実行する必要がないので、NodeJS/Fayeがポート8000​​でリッスンするELBの最終セットアップ:

Secure TCP Forward (443) -> Local (8000)
TCP Forward 80 -> Local(8000)
4
Art

アプリケーションLBを使用して、WebSocketを適切にサポートできます。 ALBにいくつかのトリックを実装した後、このアイデアを最新のプロジェクトに実装しました。

  1. 関連するすべてのSGで80ポートを開く
  2. nodeJSを80で実行する
  3. nodeJS応答のhttp-80リクエストを有効にします(NodeJSはhttpリクエストをバックエンドのwebsocketにアップグレードします)
  4. aLBターゲットグループにhttp-80を確認させ、pingパスを修正する
  5. aLBでリスナーを作成します:http80->http80, https443->http80
  6. aLBでリスナールールを作成:http80->target group, https443->target group
  7. でhttpスティッキを有効にする
1
Freman Zhang