web-dev-qa-db-ja.com

AWSとElasticBeanstalkを使用したWebSocket

WebSocketをAmazonWebServiceとElasticBeanstalk(ELB)で動作させようとしています。

次のようにプロキシプロトコルを設定しました: http://docs.aws.Amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/enable-proxy-protocol.html

すべてのIPについて、すべてのポートのロードバランサーおよびその他のセキュリティグループへのすべてのインバウンドトラフィックを開放しました。

また、ロードバランサーリスターナーをポート80でHTTPとして保持しました。

ポート80で接続しようとすると、WebSocket接続で次のエラーが発生します:failed:WebSocketハンドシェイク中にエラーが発生しました:予期しない応答コード:400

そして、ポート8080でのこのエラー:失敗:接続確立のエラー:net :: ERR_CONNECTION_REFUSED

提案をいただければ幸いです、私はこの時点で立ち往生しています。

ありがとう!

12
Martok11

EC2セキュリティグループを設定した後、アプリケーションはパブリックIPで動作します。

ただし、EBURLの使用には問題があります。この問題を解決するには、EB構成を変更する必要があります。

  1. EB環境ページに移動
  2. 構成
  3. [負荷分散]セクションで、プロトコルをHTTPからTCPに変更します。

これで、EBURLをクリックできます。

5
Nosyara

Nginxサーバーのリバースプロキシを作成する必要があります。この config file を.ebextensionsフォルダーに含めて、NginxがWSをサポートするようにすることができます。

また、EBSのロードバランサー構成で、プロトコルをHTTPからTCPに変更します。

enter image description here

安全なWebSocketをセットアップするには、これを参照してください blog

2
Anand S

AWSは、Webソケットをサポートする新しいアプリケーションロードバランサーをリリースしました。 ELBをApplicationLoad Balancerに変更すると、問題が修正されます。

https://aws.Amazon.com/blogs/aws/new-aws-application-load-balancer/

2
error2007s

この問題の可能な回避策も探していましたが、AWS EC2でWebSocketプログラムを開発するために使用しているプラ​​ットフォーム言語に関係なく、私の場合はNode.js nginxを使用しているため、これはすべてのサポートプラットフォームで機能するはずです。

セキュリティグループの構成

  1. AWSコンソールで、[EC2]タブを開きます。
  2. 関連する地域を選択し、[セキュリティグループ]をクリックします。
  3. アプリのそのリージョンでElasticBeanstalkインスタンスを起動した場合は、elasticbeanstalk-defaultセキュリティグループが必要です。
  4. 上部の[アクション]ボタンをクリックし、[インバウンドルールの編集]を選択します。
  5. ここで[タイプ]列で[すべてのTCP]を選択するか、WebSocketポートでリッスンするようにカスタムTCPルールを設定することもできます。

    以上です!

注:何かが機能していない場合は、Beanstalkアプリケーション/環境の[イベント]タブを確認して、何が問題だったかを調べてください。

1
U.Swap