web-dev-qa-db-ja.com

ec2 +アプリケーションロードバランサーでWebSocket接続を機能させることができません

ポート9999にhttpsリスナーを備えたawsアプリケーションロードバランサーがあり、ec2-instanceをターゲットとしてポート9999のグループに転送しています。

ホスト名をドメインに設定してWebsocketサーバーを実行した場合api.example.comの場合、クライアントがWebSocket接続を開こうとすると、次のようになります。

WebSocketハンドシェイク中のエラー:予期しない応答コード:502

ただし、ドメインではなく空の文字列を使用してWebSocketサーバーを構成すると、接続されます問題ありません

このインスタンスで実行しようとしているサーバーが自動的にWebSocketサーバーを起動するため、これは問題がありますのみ WebSocketホスト名構成が提供されているため、空白の文字列はWebSocketサーバーが起動しないことを意味します!その状態を回避するためにライブラリをハックする必要はありません。だから私は疑問に思っています、なぜ世界で空白の文字列が機能するのに、ドメイン名は機能しないのですか?

Localhost、ボックスのIPなどを試しましたが、空白の文字列を除いてすべてが502になります。

1
patrick

私の問題は、WebSocketサーバーのホストを0.0.0.0に設定することで解決しました

0
patrick

ALBは、ヘルスチェックにホスト名を使用しません。したがって、サーバーがホスト名のない要求をサポートしていない場合、ヘルスチェックは失敗し、ALBへのアクセス時に5xxエラーが発生します。

  • ALBがヘルスチェックエラーに使用しているターゲットグループを確認します
  • アプリケーションサーバーのログでヘルスチェック関連のエラーを確認します

サーバーがこれをサポートしていない場合、2つのオプションがあります。

  • ホスト名なしでリクエストを処理できるサーバーでプロキシ(nginxなど)を使用し、そこで問題を処理します
  • ALBヘルスチェックポートをオーバーライドし、常にHTTP 200を返すものにリダイレクトします(たとえば、同じホストで別のポートで実行されているApache)。
1
M. Glatki