宛先バックエンドサービスにリクエストを転送する前に、リクエスト内のパスとホスト名を変更するようにリライトポリシーを設定できます。これは、特定のビジネス環境とアーキテクチャの要件を満たします。リライトポリシーは、リクエスト内のパスとホスト名を正確に制御し、リクエストが適切なサービスまたはエンドポイントに正しくルーティングされるようにします。
リライトポリシー
リライトポリシーを使用すると、リクエスト内のパスとホスト名を変更できます。
パスリライト
クラウドネイティブゲートウェイでは、完全一致リライト、プレフィックスリライト、正規表現リライトのいずれかの方法を使用して、リクエスト内のパスを書き換えることができます。
完全一致リライト
リクエスト内のパスを完全に変更します。
例 1
リクエスト内のパスが /app/test で、パスを /foo/bar に書き換えたい場合は、次のリライトポリシーを設定することをお勧めします。
ルート一致条件:ルートの一致タイプを「完全一致」に設定し、パスを
/app/testに設定します。リライトポリシー:リライト方式を「完全一致リライト」に設定し、パスを
/foo/barに設定します。
完全一致リライト方式を使用する場合、ルートの一致タイプは「完全一致」または「正規表現一致」である必要があります。ルートの一致タイプを「プレフィックス一致」に設定することはできません。
プレフィックスリライト
リクエスト内のパスプレフィックスを変更します。
例 1
リクエスト内のパスが /app/test で、パスを /test に書き換えたい場合は、次のリライトポリシーを設定することをお勧めします。
ルート一致条件:ルートの一致タイプを「プレフィックス一致」に設定し、パスを
/app/に設定します。リライトポリシー:リライト方式を「プレフィックスリライト」に設定し、パスを
/に設定します。
/app/ の末尾のスラッシュ (/) は省略できません。これは、プレフィックスリライト方式を使用した場合、一致したプレフィックスのみが変更されるためです。一致条件のパスを /app に設定すると、パスは //test に書き換えられます。これは無効なパスです。
例 2
リクエスト内のパスが /v1/test で、パスを /v2/test に書き換えたい場合は、次のリライトポリシーを設定することをお勧めします。
ルート一致条件:ルートの一致タイプを「プレフィックス一致」に設定し、パスを
/v1に設定します。リライトポリシー:リライトポリシーのリライトタイプを「プレフィックスリライト」に設定し、パスを
/v2に設定します。
プレフィックスリライト方式を使用する場合、ルートの一致タイプは「プレフィックス一致」である必要があります。ルートの一致タイプを「完全一致」または「正規表現一致」に設定することはできません。ルートの一致タイプが「プレフィックス一致」に設定されている場合、指定されたプレフィックスを含むパスを持つすべてのリクエストが一致し、書き換えられます。リライトポリシーのリライトタイプを「プレフィックスリライト」に設定する前に、すべてのリクエストを書き換える必要があることを確認してください。そうでない場合は、リライトタイプを「完全一致リライト」に設定することをお勧めします。
正規表現リライト
リクエスト内のパスを部分的に変更します。正規表現リライトの設定は、「モード」パラメーターと「置換」パラメーターで構成されます。「モード」パラメーターの値は、元のパスで変更する特定の部分を照合するために使用されます。「置換」パラメーターの値は、一致した部分を置き換えるために使用されます。正規表現の構文については、RE2 正規表現構文 をご参照ください。
例 1
リクエスト内のパスが /aaa/one/bbb/one/ccc で、パスを /aaa/two/bbb/two/ccc に書き換えたい場合は、次のリライトポリシーを設定することをお勧めします。
ルート一致条件:ルートの一致タイプを「完全一致」に設定し、パスを
/aaa/one/bbb/one/cccに設定します。リライトポリシー:リライトタイプを「正規表現リライト」に設定し、「モード」パラメーターを
oneに設定し、「置換」パラメーターをtwoに設定します。
例 2
リクエスト内のパスが /httpbin/(.*)/(.*) で、パスからプレフィックス /httpbin を削除し、2 つの正規表現部分の位置を入れ替えたい場合は、次のリライトポリシーを設定することをお勧めします。
ルート一致条件:ルートの一致タイプを「正規表現一致」に設定し、パスを
/httpbin/(.*)/(.*)に設定します。リライトポリシー:リライトタイプを「正規表現リライト」に設定し、「モード」パラメーターを
/httpbin/(.*)/(.*)に設定し、「置換」パラメーターを/\2/\1に設定します。\1は、指定された正規表現を使用して一致する最初の文字列を指定します。\2は、指定された正規表現を使用して一致する2番目の文字列を指定します。 \1 文字列と \2 文字列は、NGINX Ingress の $1 と $2 に対応します。
正規表現リライト方式は、プレフィックスリライト方式と完全一致リライト方式よりも複雑です。完全一致リライト方式を使用することをお勧めします。
ホストリライト
クラウドネイティブゲートウェイでは、完全一致リライト方式を使用して、リクエスト内のホスト名を変更できます。
たとえば、リクエスト内のホスト名が test.com で、ホスト名を dev.com に書き換えたい場合は、リライトポリシーの「宛先ホスト」を dev.com に設定する必要があります。
リライトポリシーの設定
MSE コンソール にログインします。上部のナビゲーションバーで、リージョンを選択します。
左側のナビゲーションペインで、Cloud-Native Gateway > ゲートウェイリスト を選択します。「ゲートウェイ」ページで、ゲートウェイの名前をクリックします。
左側のナビゲーションペインで、Routes をクリックし、[ルート] タブをクリックします。
変更するルーティングルールを見つけ、[アクション] 列の [ポリシー] をクリックします。
[ポリシー] タブで、左側のナビゲーションペインの [リライト] をクリックします。表示されるページで、パラメーターを設定し、[保存] をクリックします。
説明「元のパス」パラメーターの「タイプ」が「完全一致」または「正規表現一致」の場合、「宛先パス」パラメーターの「タイプ」を「完全一致リライト」に設定できます。
「元のパス」パラメーターの「タイプ」が「プレフィックス一致」の場合、「宛先パス」パラメーターの「タイプ」を「プレフィックスリライト」または「正規表現リライト」に設定できます。
「元のパス」パラメーターの「タイプ」が「正規表現一致」の場合、「宛先パス」パラメーターの「タイプ」を「完全一致リライト」または「正規表現リライト」に設定できます。
リライトポリシーを設定した後、[有効化] スイッチをオンにします。[有効化] メッセージで、[OK] をクリックします。
リライトポリシーを有効にすると、ゲートウェイがリクエストを宛先バックエンドサービスに転送するときに、リクエスト内のパスとホスト名がリライトポリシーに基づいて変更されます。
リライトポリシーを有効にしない場合、リクエスト内のパスとホスト名は変更されません。
結果の確認
この例では、/app1 プレフィックスを使用して外部リクエストを識別しますが、このプレフィックスが付いたパスはバックエンドサービスで処理できません。[プレフィックスリライト] ポリシーを使用して /app1/ を / に書き換えることで、リクエストが転送されるようにすることができます。
元のパスを含むサンプル URL:
curl -I http://121.196.XX.XX/demo/item/listパスリライト後のサンプル URL:(リライト後の宛先パスは引き続き
/demo/item/listです。)curl -I http://121.196.XX.XX/app1/demo/item/list