私はPOCに取り組んでおり、Expressを使用して、Application Load Balancerを介した一連の非常に基本的な「hello world」node.jsアプリケーションへのAWSパスベースのルーティングを証明しています。パスベースのルーティングがなく、複数のリスナーがあり、各アプリケーションに1つのリスナーがあり、それぞれのリスナーとアプリケーションは期待どおりに動作しています。したがって、ターゲットグループ内のターゲットは両方ともヘルスチェックに合格し、正常と表示されます。ただし、リスナーの1つでパスベースのルーティング実装に切り替える(他の不要なリスナーを削除する)と、両方のアプリケーションで次のエラーが発生します。
/ expressappを取得できません
/expressapp2を取得できません
私は次のドキュメントを調べて問題を解決しようとしました: http://docs.aws.Amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#path-conditions =
何が欠けていますか?トラブルシューティングのアイデアはありますか?
問題のサービスは/expressapp
および/expressapp2
で始まるパスを受け取ることを期待していないため、このエラーが発生していると思います。 ALBがトラフィックをサービスに転送するとき、パスはそのまま残ります。
プレフィックスの除去は、ALBでは処理できません。アプリのソースコードにアクセスできない場合は、nginxなどのリバースプロキシを使用して、アプリに送信する前にURLを書き換える必要があります。
ソースコードにアクセスできる場合、expressは コードを変更せずにベースURLを変更する をサポートします。 urlプレフィックスの値を環境変数として読み取り、それに応じてそれぞれのサービス環境を構成できます。
両方のルールをそれぞれの位置から反転させます。つまり、expressapp2ルール#1とexpressアプリルール#2を作成して、期待どおりに機能するようにします。
ALBはこれらのルールを優先順位で評価し、コンテキストパスがexpressapp2であっても、それはexpressappに一致し、最初のルールが評価されます。