2016-12-22 3 views
1

ALB/Node.js/socket.ioソリューションが最も簡単な形式で動作しようとしていますが、ハンドシェイクが切断される問題が発生しています。現時点では、私は意図的にTargetGroupのノードを1つだけ使用して、ノード切り替えやセッションスティッキースに関連する変数を削除しています。Socket.ioを使用しているときにAWS ALBが切断される理由

NATインスタンス経由でノードに直接接続すると正常に動作します。切断は、ALBを通過するときにのみ発生します。 - > 8081(SSLなし)

  • 2 AZS、インターネットへのルートの両方(ALBsのために必要とされる)
  • リスナーHTTP 80と

    • ALBを:ここで

      は、私が設定したものです

    • デフォルトのパターン(その中に私の一つのノードを持つ)socket.ioターゲットグループに/socket.io/*ためAZS
    • パスパターンの一つで一つsocket.io EC2のノードは、socket.ioターゲットグループ
    • です 有効
    • スティッキ(1つのノードに対して必要がありますが、とにかくそれをやってはいけません)

    ここでは、私はsocket.ioノードクライアントで見たものである。

    Thu, 22 Dec 2016 20:59:26 GMT socket.io-client:manager opening ws://52.72.198.58 
    Thu, 22 Dec 2016 20:59:26 GMT engine.io-client:socket creating transport "websocket" 
    Thu, 22 Dec 2016 20:59:26 GMT engine.io-client:socket setting transport websocket 
    Thu, 22 Dec 2016 20:59:26 GMT socket.io-client:manager connect attempt will timeout after 20000 
    Thu, 22 Dec 2016 20:59:26 GMT engine.io-client:socket socket close with reason: "transport close" 
    

    そして、ここでは、私が上で見たものですsocket.ioノードサーバー:なしトランスポートが閉じ持つ

    Thu, 22 Dec 2016 20:59:26 GMT socket.io:socket joined room U_qmSv_7gvP_JOFsAAAL 
    Thu, 22 Dec 2016 20:59:26 GMT socket.io:client client close with reason transport close 
    Thu, 22 Dec 2016 20:59:26 GMT socket.io:socket closing socket - reason transport close 
    

    私は同じsocket.io EC2のノードに私のNATを通して行く、それはすべての作品。

    何とかALBは、成功したハンドシェイク中にすぐに接続を閉じています。

    NAT経由で動作するので、socket.ioノードとクライアントは問題ありません。そして、ノードのDEBUGエントリが表示されているので、ALBがsocket.ioノードに到達できることがわかります。私は1つのsocket.ioノードしか持っていないので、セッションや粘着性に問題はありません。

    ALBを使用するとすぐに切断される原因は何ですか?

    EDIT:ELBへのリクエストをしているsocket.ioクライアントがEC2ノード上にある場合は、動作することもわかりました。これは、クライアントとELBの間のネットワークパスに何かを含意します。私はまだ、クライアントがEC2上にいるとき以外はこれが動作するケースを見つけていません。これはELB経由ではなく、NATを介してどこでも動作します。

  • +0

    node.jsの前にもう1つリバースプロキシがありますか? nginxのような?私はこの問題をEBを使用していましたが、socket.ioの接続はnginxのためにタイムアウトしました... – mkhanoyan

    +0

    パスに他のコンポーネントがありません。 ec2にalbするだけのノードクライアント。そしてすぐに切断されます...タイムアウトではありません。 –

    +0

    HTTPの代わりに80でTCP接続をリッスンしようとしましたか? – mkhanoyan

    答えて

    1

    多くの試行錯誤の末、ALB/ELBがリッスンしているポートについて、特定のポート範囲(80-83)が原因であると判断できました。ハンドシェイクのHTTP部分が機能している間に、2番目のTCPアップグレードフェーズが切断されます。

    このポート範囲に関連するVPCには制限がないため、クライアントとELBの間のネットワークに問題があります。

    結論として、問題はAWSには何もなく、私はリソースをどのように設定したのか、それはAWS以外の場所にあります。私が正確な原因を見つけたら、私はこの答えにコメントを投稿します。

    +0

    問題が見つかりましたか? –

    関連する問題