このトピックでは、ドメイン名とパスの照合、書き換え、リダイレクトを含む ALB 転送ルールの設定例について説明します。
設定例
シナリオ 1: HTTP から HTTPS へのリダイレクト
HTTP リクエストを HTTPS にリダイレクトして、転送中のデータが暗号化されるようにします。これは、HTTP リスナー (ポート 80) に転送ルールを追加することで実現できます。
パラメーター | 説明 |
転送条件 | パス を 完全一致とワイルドカード に設定し、 |
転送操作 | リダイレクト を選択します。
|
結果: ユーザーが http://www.example.com/page にアクセスすると、ブラウザは自動的に https://www.example.com/page にリダイレクトします。
このルールは HTTP リスナー (ポート 80) で設定してください。また、HTTPS リスナー (ポート 443) が作成され、有効な SSL 証明書に関連付けられていることを確認してください。完全な前提条件と手順については、「ALB を使用して HTTP リクエストを HTTPS にリダイレクトする」をご参照ください。
シナリオ 2: パスによるトラフィックのルーティング
単一のドメインに対して、異なるパスを持つリクエストを異なるサーバーグループに転送できます。例えば、API リクエストと静的アセットリクエストを別々のバックエンドに転送できます。
ルール 1: /api/* へのリクエストを API サーバーグループに転送します。
パラメーター | 説明 |
転送条件 | パス を 完全一致とワイルドカード に設定し、 |
転送操作 | 転送 を選択し、API サーバーグループを選択します。 |
ルール 2: /static/* へのリクエストを静的アセットサーバーグループに転送します。
パラメーター | 説明 |
転送条件 | パス を 完全一致とワイルドカード に設定し、 |
転送操作 | 転送 を選択し、静的アセットサーバーグループを選択します。 |
ALB は、転送ルールを優先度番号に基づいて順番に評価します。より具体的なパスルール (優先度番号が小さい) を、より広範なルールの前に配置して、ワイルドカードルールに先に一致しないようにしてください。例えば、/api/v2/*のルールは、/api/*のルールよりも低い優先度番号を持つ必要があります。
シナリオ 3: 複数のドメインの転送
単一の ALB インスタンスで複数のドメインをホストし、各ドメインへのリクエストをそれぞれのバックエンドサーバーグループに転送します。
ルール 1: www.example.com へのリクエストを Web サーバーグループに転送します。
パラメーター | 説明 |
転送条件 | ドメイン名 を 完全一致とワイルドカード に設定し、 |
転送操作 | 転送 を選択し、Web サーバーグループを選択します。 |
ルール 2: api.example.com へのリクエストを API サーバーグループに転送します。
パラメーター | 説明 |
転送条件 | ドメイン名 を 完全一致とワイルドカード に設定し、 |
転送操作 | 転送 を選択し、API サーバーグループを選択します。 |
シナリオ 4: 転送前にパスプレフィックスを削除
リクエストをバックエンドに転送する前に、リクエストパスから特定のプレフィックスを削除しつつ、プレフィックス後の複数レベルのパスをキャプチャします。例えば、ALB が www.example.com/api/aaa/bbb/... へのリクエストを転送する際に、/api 部分をパスから削除し、/aaa/bbb/... のような後続の複数レベルのパスをキャプチャする必要があります。
書き換えは ALB 内部でパスを置き換えます。クライアントのブラウザのアドレスバーの URL は変更されません。リダイレクトは新しい URL をクライアントに返し、ブラウザのアドレスバーは新しい URL に更新されます。バックエンドがプレフィックスなしのパスを受け取るだけでよい場合は書き換えを使用します。クライアントが URL の変更を認識する必要がある場合はリダイレクトを使用します。
書き換え
パラメーター | 説明 | |
転送条件 | ドメイン名 | 完全一致とワイルドカード に設定し、 |
パス | 正規表現 | 大文字と小文字を区別しない に設定し、 | |
転送操作 | 書き換え |
|
転送 | ターゲットサーバーグループを選択します。 | |
リダイレクト
パラメーター | 説明 | |
転送条件 | ドメイン名 | 完全一致とワイルドカード に設定し、 |
パス | 正規表現 | 大文字と小文字を区別しない に設定し、 | |
転送操作 | リダイレクト |
|
結果: www.example.com/api/aaa/bbb/... へのリクエストに対し、バックエンドサーバーはパス /aaa/bbb/... を受け取ります。
シナリオ 5: ベアドメインから www へのリダイレクト
ベアドメイン (例: example.com) から www.example.com へのリクエストをリダイレクトします。これにより、エントリポイントが統一され、SEO の向上と管理の簡素化が図れます。
パラメーター | 説明 |
転送条件 | ドメイン名 を 完全一致とワイルドカード に設定し、 |
転送操作 | リダイレクト を選択します。
|
結果: ユーザーが example.com にアクセスすると、ブラウザは自動的に www.example.com にリダイレクトします。プロトコルとポートは変更されません。
HTTP リクエストを HTTPS にリダイレクトする必要もある場合は、この設定をシナリオ 1 と組み合わせてください。
シナリオ 6: ワイルドカードドメインの照合
ワイルドカードドメインを使用してすべてのサブドメインを照合し、それらのリクエストを同じサーバーグループに転送します。
パラメーター | 説明 |
転送条件 | ドメイン名 を 完全一致とワイルドカード に設定し、 |
転送操作 | 転送 を選択し、ターゲットサーバーグループを選択します。 |
結果: a.example.com、b.example.com、tenant1.example.com などのすべての照合するサブドメインへのリクエストは、同じサーバーグループに転送されます。
特定のサブドメインを別のサーバーグループに転送するには、その完全なドメインに対するルールを作成し、ワイルドカードルールよりも低い優先度番号を割り当ててください。ALB は、ドメイン照合の具体性ではなく、優先度番号に基づいてルールを評価します。
シナリオ 7: HTTP ヘッダーによるカナリアリリース
HTTP ヘッダーを使用してカナリアリリースを実装します。これにより、特定のヘッダーを持つリクエストは新バージョンのサーバーグループに転送され、その他のリクエストは現行バージョンのサーバーグループに転送されます。
ルール 1 (カナリアルール、優先度高): X-Canary: true ヘッダーを含むリクエストを新バージョンのサーバーグループに転送します。
パラメーター | 説明 |
転送条件 | HTTP ヘッダー を選択し、キーを |
転送操作 | 転送 を選択し、新バージョンのサーバーグループを選択します。 |
ルール 2 (デフォルトルール、優先度低): カナリアヘッダーのないリクエストは、現行バージョンのサーバーグループに転送されます。これは、リスナーのデフォルト転送ルールを使用して実装できます。
結果: クライアントリクエストに X-Canary: true ヘッダーが含まれている場合、トラフィックは新バージョンのサーバーグループに転送されます。このヘッダーのないリクエストは、現行バージョンのサーバーグループに転送されます。
カナリアトラフィックが最初に照合されるようにするには、カナリアルールがデフォルトルールよりも低い優先度番号 (優先度が高いことを示す) を持つ必要があります。Cookie とサーバーグループの重みに基づくカナリアリリースの方法については、「ALB を使用してカナリアリリースを実装する」をご参照ください。
転送ルールにおけるドメイン名の照合
ALB は、転送ルールを優先度番号の昇順 (小さいものから大きいものへ) で評価し、最初に一致したルールで停止します。ルールはドメインの具体性によって自動的にソートされません。この動作は、具体性に基づいてルールを自動的に優先する CLB (例: 完全一致 > より狭いワイルドカード > より広いワイルドカード) とは異なります。
例えば、リスナーに次の 2 つのルールがあるとします:
優先度番号 | 照合条件 |
ルール 1 (優先度: 1) | ドメイン = |
ルール 2 (優先度: 2) | ドメイン = |
www.example.com へのリクエストは、ルール 1 (ワイルドカードルール) に一致します。これは、ルール 1 の優先度番号が低いためです。ルール 2 (完全一致ルール) には一致しません。
ベストプラクティス: より具体的なルールが先に評価されるようにするには、より広範なルールよりも低い優先度番号を割り当ててください。例えば、www.example.comのルールを優先度 1 に設定し、*.example.comのルールを優先度 2 に設定します。
照合タイプ | 説明 |
完全一致とワイルドカード一致 |
|
正規表現一致 |
|
転送ルールのパス照合
ALB のパス照合ルールは Nginx とは異なります。ALB は最長プレフィックス一致の原則をサポートしていません。例えば、Nginx は location /api のような一般的な設定に対して最長プレフィックス一致メソッドを使用します。ALB で同じ効果を得るには、ワイルドカードを使用する必要があります。パスを /api/* (完全一致とワイルドカードの組み合わせ) として設定できます。
リスナーに/api/*と/api/v2/*の両方のルールがある場合、/api/v2/*ルールに低いルール番号を割り当てて、/api/*ルールの前に配置する必要があります。そうしないと、/api/*ルールがすべてのリクエストに先に一致してしまいます。
照合タイプ | 説明 |
完全一致とワイルドカード一致 |
|
正規表現一致 |
|
正規表現一致モードでは、パスの末尾のスラッシュ (/) が照合結果に影響します。例えば、正規表現 ~^/ws/(.*) は /ws/ で始まるパス (例: /ws/ や /ws/abc) にのみ一致し、/ws (末尾のスラッシュなし) には一致しません。/ws と /ws/ で始まるパスの両方に一致させたい場合は、正規表現 ~^/ws(/.*)?$ を使用してください。
書き換えとリダイレクトのための高度なパス設定
転送条件でパスを定義するために正規表現を使用する場合、書き換えまたはリダイレクトアクションのパスで正規表現の置換を使用できます。
注意事項
転送条件の正規表現における括弧
( )で定義されるキャプチャグループの数は、転送アクションの書き換えまたはリダイレクトパスの ${n} 変数の数と一致する必要があります。転送アクションの書き換えまたはリダイレクトパスには、
${1}、${2}、${3}の 1 つ以上を含める必要があります。これらの変数を他の文字で置き換えないでください。書き換えまたはリダイレクトパスでは、
$文字は次の変数を参照するためにのみ使用してください:${host}、${path}、${port}、${protocol}、および正規表現キャプチャグループ変数 (例:${1}、${2}、${3})。他の変数はサポートされていません。
仕組み
パスの照合: クライアントが転送ルールの正規表現に一致するリクエストを送信します。
抽出と置換: システムは、括弧
( )で定義された最初の 3 つのキャプチャグループからコンテンツを抽出し、${1}、${2}、${3}変数に保存します。これらの変数は、転送アクションの書き換えまたはリダイレクトパスでの置換に使用されます。パスの構築: システムは、
${1}、${2}、${3}変数をキャプチャされた値で置き換え、書き換えまたはリダイレクトの最終的なパスを構築します。
No.
ステップ
例
1
転送ルールの転送条件と転送アクションを設定します。
転送条件のパス:
/app/(.*)/(.*)/settings書き換えまたはリダイレクトアクションのパス:
/${1}/${2}
2
クライアントがパスに一致するリクエストを送信します。
クライアントからのリクエストパス:
/app/users/profile/settings転送条件で一致したパス:
/app/(.*)/(.*)/settings
3
値を抽出して置換します。
システムは、転送条件パスの 2 つの
(.*)キャプチャグループからusersとprofileを抽出し、転送アクションの ${1} と ${2} 変数に値を保存します。${1}はusersに置き換えられます。${2}はprofileに置き換えられます。
4
パスを構築します。
バックエンドサーバーが受け取るパス:
/users/profile設定例
コンソールで転送ルールを追加する際は、前述の注意事項とワークフローの説明をご参照ください。
例 1: 転送アクションを 書き換え と 転送 に設定する
この例では、パス
/app/users/profile/settingsを/users/profileに書き換え、リクエストをバックエンドサーバーに転送する方法を示します。正規表現/app/(.*)/(.*)/settingsは 2 つのキャプチャグループを使用してusersとprofileを抽出します。書き換えられたパスは、/${1}/${2}を使用して最終的なパスを構築します。パラメーター
説明
転送条件
パス
正規表現 | 大文字と小文字を区別しない を選択し、正規表現
/app/(.*)/(.*)/settingsを入力します。例えば、クライアントがパス
/app/users/profile/settingsをリクエストした場合、ルールが一致します。キャプチャグループはusersとprofileを抽出し、それぞれ${1}と${2}変数に保存されます。転送操作
書き換え
ドメイン名:
${host}パス:
/${1}/${2}クエリ:
${query}
クエリ は、URL の疑問符に続く部分です。例えば、URL
www.example.com/test/test1?x=1の場合、クエリ はx=1です。転送
サーバーグループリストからターゲットサーバーグループを選択します。
例 2: 転送アクションをリダイレクトに設定する
次の例では、パス
/app/users/profile/settingsを/users/profileにリダイレクトします。例 1 とは異なり、このリダイレクトは 301 ステータスコードを返し、ブラウザのアドレスバーの URL が変更されます。パラメーター
説明
転送条件
パス
正規表現 | 大文字と小文字を区別しない を選択し、正規表現
/app/(.*)/(.*)/settingsを入力します。例えば、クライアントがパス
/app/users/profile/settingsをリクエストした場合、ルールが一致します。キャプチャグループはusersとprofileを抽出し、それぞれ${1}と${2}変数に保存されます。転送操作
リダイレクト
プロトコル:
${protocol}ドメイン名:
${host}ポート:
${port}パス:
/${1}/${2}クエリ:
${query}ステータスコード:
301
よくある質問
ドメイン名のみを書き換える
リクエストされたドメイン名を別のドメイン名に書き換え、パスとクエリ文字列は変更しない場合、ルールを次のように設定します:
転送条件: ドメイン名を元のドメイン名 (例:
old.example.com) に設定します。転送操作: 書き換えを選択します。ドメイン名を新しいドメイン名 (例:
new.example.com) に設定し、パスを${path}に、クエリを${query}に設定します。また、転送 を設定してサーバーグループを指定します。
パスにプレフィックスを追加する
パスにプレフィックスを追加する (例: /users/list を /v2/users/list に書き換える) には、ルールを次のように設定します:
転送条件: パスを正規表現
^/(.*)に一致するように設定します。転送操作: 書き換えを選択し、パスを
/v2/${1}に設定します。また、転送 を設定してサーバーグループを指定します。
ルールを設定すると、ALB は /users/list へのリクエストを /v2/users/list に書き換え、バックエンドサーバーに転送します。
パスプレフィックスを削除する
このトピックの「ユースケース 4: パスプレフィックスを削除した後のリクエスト転送」をご参照ください。このユースケースでは、書き換えまたはリダイレクトアクションと正規表現一致を使用して、/api/* などのプレフィックスを削除するための完全な設定例を提供しています。
転送ルールの照合とルーティングのトラブルシューティング
転送ルールが期待どおりにリクエストをルーティングしない場合は、次のトラブルシューティング手順を使用してください:
ルールの優先度を確認する: ALB はルールを優先度番号の昇順で評価し、最初に一致したルールで停止します。より広範なルールが低い優先度番号を持つ (したがって先に評価される) 場合、より高い優先度番号を持つより具体的なルールは一致しません。
照合タイプを確認する: 正しい照合タイプ (完全一致、ワイルドカード、または正規表現) を使用していることを確認してください。例えば、
/apiの完全一致は/api/usersには一致しません。両方に一致させるには、/api/*のようなワイルドカードを使用する必要があります。複数の条件を確認する: 1 つの転送ルールに複数の条件を設定する場合、異なるタイプの条件は AND 演算子で結合され、同じ条件タイプの複数の値は OR 演算子で結合されます。詳細については、「リスナー転送ルールの設定」をご参照ください。
アクセスログを確認する: ALB アクセスログの
hostおよびrequest_uriフィールドを使用して、ALB が受信したリクエストの詳細が期待どおりであることを確認します。
書き換えとリダイレクトの比較
項目 | 書き換え | リダイレクト |
ブラウザのアドレスバー | 変更されない (ユーザーには透過的) | 新しい URL への変更 |
仕組み | ALB はリクエストパスを内部で書き換え、リクエストをバックエンドサーバーに転送します。プロセス全体が 1 回のリクエストで完了します。 | ALB は 3xx ステータスコードを返し、ブラウザは新しい URL への 2 回目のリクエストを開始します。 |
ユースケース | プレフィックスの削除やバージョン番号の追加など、内部的なパスの調整。 | HTTP から HTTPS へのリダイレクト、ベアドメインから www へのリダイレクト、レガシー URL の移行。 |
「転送先」が必要です | はい。書き換えアクションには、サーバーグループを指定する「転送先」アクションを設定する必要があります。 | いいえ。リダイレクトアクションは単独で完結します。 |
関連ドキュメント
ALB のリスナー転送ルールの設定手順については、「リスナー転送ルールの設定」をご参照ください。