2

Classic Load Balancer(Elastic Beanstalk)の背後にAWSでホストされ、Nginx経由でsocket.ioサーバーにプロキシされるLaravel/Vue.JSアプリケーションがあります。 SSLはNginxで終了します。AWS EB:WebSocketハンドシェイク時のエラー:予期しない応答コード:400

これは、nginxの設定ファイルである:

location /socket.io { 
    proxy_pass   http://127.0.0.1:6001; 
    proxy_http_version 1.1; 
    proxy_set_header Upgrade   $http_upgrade; 
    proxy_set_header Connection  "upgrade"; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP   $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Forwarded-Proto $scheme; 
} 

今のロングポーリングモードが正常に動作しますが、それはアップグレードを開始するのに失敗します。WSS」へ

のWebSocket接続://例?.COM/socket.io/EIO = 3 &輸送= &のWebSocket SID = HmDFtq-aj1WgfGUyAAAJ」失敗:のWebSocketハンドシェイク中のエラー:予期しない応答コード:400

P.S Chromeの私は、この奇妙なメッセージを見ることができますFramesタブ:(Opcode -1)

誰もが正常にsocket.io AWS Elastic Beanstalkで環境に取り組んで持っていますか?私はちょうどこの問題に対処する2週間を無駄にした、非常に任意の提案やアイデアに感謝します。ありがとう!

更新。私は、冗長ロギングをオンにし、ここでnginxの内の変数です:

$host example.com 
$proxy_add_x_forwarded_for 134.xxx.xxx.xxx 
$http_upgrade - 
$remote_addr 172.31.10.208 
$remote_user - 
$server_name _ 
$upstream_addr 127.0.0.1:6001 
$request GET /socket.io/?EIO=3&transport=polling&t=Lw26sYn&sid=6L5iHma-GJOeE3JQAAAX HTTP/1.1 
$upstream_response_time 24.658 msec 
$request_time 24.658 

はたぶん誰かが私はどんなアドバイスをいただければ幸いです間違ったこれらの値のいくつかを見つけるでしょう。

+0

'proxy_set_header Host $ host;'を削除し、 –

+0

@TarunLalwaniをテストしても残念ですが動作しません。 –

+0

'6001'ソケットサーバのログには何が表示されますか? –

答えて

4

ELBはHTTP/HTTPリスナーまたはTCP/SSLリスナーを使用していますか? Webソケットは、後者のプロトコルタイプでのみ動作します。リスナーをTCPに変更すれば正常に動作します。

また、CLIまたはAPIを使用して環境を構築した場合、ALBがWebソケットもサポートするため、ELB(Application Load Balancer)ではなくApplication Load Balancer(ALB)を使用してElasticBeanstalkアプリケーションを再構築できます。このオプションはWebコンソールからは利用できません。

+0

ありがとう、私はそれを試して、すぐに戻ってきます。私は前にそれを試したと思うが、もう一度試してみる。 –

+0

クール、それは動作しているようですが、まだ、私はインスタンスの1つ(私は2つ)から400エラーがあります。あなたのメソッドは複数のインスタンスで動作しますか? –

+0

はい、ELBでは、「スティッキーセッションを有効にする」か「クロスゾーンロードバランシングを無効にする」のいずれかが必要です。 HTTPとWebSocketの両方の要求が同じインスタンスに送られるようにすることが目的です。私はそれが動作することを証明するためにテストケースのセットアップを持っていないが、それが私は答えを更新する場合は私に知らせてください。 –

関連する問題