web-dev-qa-db-ja.com

AWS Application Load Balancer(ALB)パスベースのルーティングが期待どおりに機能しない

私はPOCに取り組んでおり、Expressを使用して、Application Load Balancerを介した一連の非常に基本的な「hello world」node.jsアプリケーションへのAWSパスベースのルーティングを証明しています。パスベースのルーティングがなく、複数のリスナーがあり、各アプリケーションに1つのリスナーがあり、それぞれのリスナーとアプリケーションは期待どおりに動作しています。したがって、ターゲットグループ内のターゲットは両方ともヘルスチェックに合格し、正常と表示されます。ただし、リスナーの1つでパスベースのルーティング実装に切り替える(他の不要なリスナーを削除する)と、両方のアプリケーションで次のエラーが発生します。

/ expressappを取得できません
/expressapp2を取得できません

Listener Rules

私は次のドキュメントを調べて問題を解決しようとしました: http://docs.aws.Amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#path-conditions =

何が欠けていますか?トラブルシューティングのアイデアはありますか?

14
Andrew Guthrie

問題のサービスは/expressappおよび/expressapp2で始まるパスを受け取ることを期待していないため、このエラーが発生していると思います。 ALBがトラフィックをサービスに転送するとき、パスはそのまま残ります。

プレフィックスの除去は、ALBでは処理できません。アプリのソースコードにアクセスできない場合は、nginxなどのリバースプロキシを使用して、アプリに送信する前にURLを書き換える必要があります。

ソースコードにアクセスできる場合、expressは コードを変更せずにベースURLを変更する をサポートします。 urlプレフィックスの値を環境変数として読み取り、それに応じてそれぞれのサービス環境を構成できます。

1
Master_Yoda

両方のルールをそれぞれの位置から反転させます。つまり、expressapp2ルール#1とexpressアプリルール#2を作成して、期待どおりに機能するようにします。

ALBはこれらのルールを優先順位で評価し、コンテキストパスがexpressapp2であっても、それはexpressappに一致し、最初のルールが評価されます。

0
user2062360