適用対象: ✔️ Front Door Standard ✔️ Front Door Premium
ルール セットのサーバー変数では、ルール セットを使用する要求に関する構造化情報にアクセスできます。
ルール セットの一致条件を使用すると、サーバー変数を一致条件として使用して、特定のプロパティを持つ要求を識別できます。
ルール セットのアクションを使うと、新しいページが読み込まれるときや、フォームがポストされるときなどに、要求ヘッダーと応答ヘッダーを動的に変更し、また URL、パス、クエリ文字列を書き換えるためのサーバー変数を使用できます。
注
サーバー変数は、Azure Front Door Standard レベルと Premium レベルでのみ使用できます。
サポートされる変数
| 変数名 | 説明 |
|---|---|
socket_ip |
Azure Front Door エッジへの直接接続の IP アドレス。 クライアントが HTTP プロキシまたはロード バランサーを使用して要求を送信した場合、socket_ip の値はプロキシまたはロード バランサーの IP アドレスです。一致条件でこのサーバー変数にアクセスするには、ソケット アドレスを使用します。 |
client_ip |
元の要求を行ったクライアントの IP アドレス。 要求に X-Forwarded-For ヘッダーがあった場合、ヘッダーからクライアント IP が選択されます。一致条件でこのサーバー変数にアクセスするには、リモート アドレスを使用し、"演算子" を "IP が次の値と一致" または "IP が次の値と一致しない" に設定します。 |
client_port |
要求を行ったクライアントの IP アドレス。 一致条件でこのサーバー変数にアクセスするには、クライアント ポートを使用します。 |
hostname |
クライアントからの要求に含まれるホスト名。 一致条件でこのサーバー変数にアクセスするには、ホスト名を使用します。 |
geo_country |
国および地域コードによって配信元の要求者の国および地域を示します。 一致条件でこのサーバー変数にアクセスするには、リモート アドレスを使用し、"演算子" を "geo が次の値と一致" または "geo が次の値と一致しない" に設定します。 |
http_method |
URL 要求を行うために使用されたメソッド (GET や POST など)。一致条件でこのサーバー変数にアクセスするには、要求メソッドを使用します。 |
http_version |
要求プロトコル。 通常は HTTP/1.0、HTTP/1.1、HTTP/2.0 です。一致条件でこのサーバー変数にアクセスするには、HTTP バージョンを使用します。 |
query_string |
要求された URL 内で ? の後にある、変数と値のペアから成る一覧。たとえば、要求 http://contoso.com:8080/article.aspx?id=123&title=fabrikam の場合、query_string 値は id=123&title=fabrikam です。一致条件でこのサーバー変数にアクセスするには、クエリ文字列を使用します。 |
request_scheme |
要求スキーム: http または https。一致条件でこのサーバー変数にアクセスするには、要求プロトコルを使用します。 |
request_uri |
完全な元の要求 URI (引数を含む)。 たとえば、要求 http://contoso.com:8080/article.aspx?id=123&title=fabrikam の場合、request_uri 値は http://contoso.com:8080/article.aspx?id=123&title=fabrikam です。一致条件でこのサーバー変数にアクセスするには、要求 URL を使用します。 |
ssl_protocol |
確立された TLS 接続のプロトコル。 一致条件でこのサーバー変数にアクセスするには、SSL プロトコルを使用します。 |
server_port |
要求を受け付けたサーバーのポート。 一致条件でこのサーバー変数にアクセスするには、サーバー ポートを使用します。 |
url_path |
Web クライアントがアクセスする必要があるホスト内の特定のリソースを識別します。 これは、引数や先頭のスラッシュを含まない要求 URI の一部です。 たとえば、要求 http://contoso.com:8080/article.aspx?id=123&title=fabrikam の場合、url_path 値は article.aspx です。 Azure Front Door では、 {url_path:seg#} サーバー変数を使用した URL パスの動的キャプチャがサポートされ、{url_path.tolower} または {url_path.toupper} で URL パスが小文字または大文字に変換されます。 詳細については、「サーバー変数の形式」および「サーバー変数」を参照してください。 一致条件でこのサーバー変数にアクセスするには、要求パス条件を使用します。 |
http_req_header_<headername> |
要求ヘッダーの値をキャプチャします。 たとえば、要求ヘッダー Device: Desktop の場合、変数はhttp_req_header_Device。この変数の値は Desktop です。 変数構文のヘッダー名は、英数字とハイフン (a から z、A から Z、0 から 9、および "-") をサポートします。 |
http_req_arg_<querystringkeyname> |
クエリ文字列キーの値ペアから値をキャプチャします。 たとえば、要求 http://contoso.com:8080/article.aspx?id=123&title=fabrikamでは変数がhttp_req_header_id、この変数の値は 123 です。 変数構文のクエリ文字列キーは、英数字とハイフン (a から z、A から Z、0 から 9、および "-") をサポートします。 |
http_resp_header_<headername> |
配信元から応答ヘッダーの値をキャプチャします。 たとえば、応答ヘッダー Access-Control-Allow-Origin https://learn.microsoft.com の場合、変数 http_req_header_ はヘッダー Access-Control-Allow-Origin を指し、この変数の値は https://learn.microsoft.com です。 変数構文のヘッダー名は、英数字とハイフン (a から z、A から Z、0 から 9、および "-") をサポートします。 |
サーバー変数の形式
ルール セットのアクションを使用する場合は、次の形式を使用してサーバー変数を指定します。
-
{variable}: サーバー変数全体を含めます。 たとえば、クライアントの IP アドレスが111.222.333.444の場合、{client_ip}トークンは111.222.333.444に評価されます。 -
{variable:offset}: 特定のオフセットの後から、変数の末尾まで、サーバー変数を含めます。 オフセットは 0 から始まります。 たとえば、クライアントの IP アドレスが111.222.333.444の場合、{client_ip:3}トークンは.222.333.444に評価されます。 -
{variable:offset:length}: 特定のオフセットの後から、指定した長さまで、サーバー変数を含めます。 オフセットは 0 から始まります。 たとえば、変数 var が 'AppId=01f592979c584d0f9d679db3e66a3e5e' の場合、- 範囲内のオフセット、長さなし:
{var:0}=AppId=01f592979c584d0f9d679db3e66a3e5e、{var:6}=01f592979c584d0f9d679db3e66a3e5e、{var:-8}=e66a3e5e - 範囲外のオフセット、長さなし:
{var:-128}=AppId=01f592979c584d0f9d679db3e66a3e5e、{var:128}= null - 範囲内のオフセットと長さ:
{var:0:5}=AppId、{var:7:7}=1f59297、{var:7:-7}=1f592979c584d0f9d679db3e - 長さ 0:
{var:0:0}= null、{var:4:0}= null - 範囲内のオフセットと範囲外の長さ:
{var:0:100}=AppId=01f592979c584d0f9d679db3e66a3e5e、{var:5:100}==01f592979c584d0f9d679db3e66a3e5e、{var:0:-48}= null、{var:4:-48}= null - {variable:offset:length} のしくみを試すには、Linux bash ターミナルを開くか、 Azure Cloud Shell で bash ターミナルを使用します。 ターミナルに次の例を入力し、出力を調べて、部分文字列抽出の動作を理解します。
- 範囲内のオフセット、長さなし:
variable=helloworld123; echo ${variable:5} #Output = world123
variable=helloworld123; echo ${variable:0:5} #Output = hello
注
Bash では、構文エラーを回避するために、パラメーター拡張の負の数の前にスペースが必要です。
variable=helloworld123; echo ${variable: -3:3} #Output=123
variable=helloworld123; echo ${variable:5: -3} #Output = world
{url_path:seg#}: ユーザーが URL リダイレクト、URL 書き換え、または意味のあるアクションで望ましい URL パス セグメントをキャプチャして使用できるようにします。 ユーザーは、substring キャプチャ{url_path:seg1:3}と同じスタイルを使用して、複数のセグメントをキャプチャすることもできます。 たとえば、ソース パターン/id/12345/defaultと URL 書き換え先/{url_path:seg1}/homeの場合、予想される書き換え後の URL パスは/12345/homeです。 マルチセグメント キャプチャの場合、ソース パターンが/id/12345/default/location/testのときは、URL 書き換え先/{url_path:seg1:3}/homeの結果は/12345/default/location/homeです。 セグメント キャプチャには場所パスが含まれているため、ルートが/match/*の場合、セグメント 0 が一致します。オフセットは開始セグメントのインデックスに対応し、長さはキャプチャするセグメントの数 ("インデックス = オフセット" のものを含む) を指します。
オフセットと長さが正であると仮定すると、次のロジックが適用されます。
- 長さが含まれない場合は、インデックス = オフセットでセグメントをキャプチャします。
- 長さが含まれる場合は、"インデックス = オフセット" から "インデックス = オフセット + 長さ" までのセグメントをキャプチャします。
次の特殊なケースも処理されます。
- オフセットが負の場合は、パスの末尾から後方にカウントして開始セグメントを取得します。
- オフセットがセグメント数以上の負の値の場合は、0 に設定します。
- オフセットがセグメント数より大きい場合、結果は空になります。
- 長さが 0 の場合、オフセットで指定された単一セグメントが返されます。
- 長さが負の場合は、2 番目のオフセットとして扱い、パスの末尾から後方に計算します。 値がオフセットより小さい場合は、空の文字列になります。
- 長さがセグメント数より大きい場合は、パスに残っているものが返されます。
{url_path.tolower}/{url_path.toupper}: URL パスを小文字または大文字に変換します。 たとえば、{url_path.tolower}の URL 書き換え先/リダイレクト先が/lowercase/ABcDXyZ/EXAMPLEの場合、結果は/lowercase/abcdxyz/exampleです。{url_path.toupper}の URL 書き換え先/リダイレクト先が/ABcDXyZ/exampleの場合、結果は/ABCDXYZ/EXAMPLEです。
サポートされているルール セットのアクション
サーバー変数は、次のルール セットのアクションでサポートされています。
- ルート構成のオーバーライドでのクエリ文字列のキャッシュ動作
- 要求ヘッダーの変更
- 応答ヘッダーの変更
- URL リダイレクト
- URL 書き換え
次の手順
- Azure Front Door のルール セットの詳細について確認します。
- ルール セットの一致条件の詳細を確認します。
- ルール セットのアクションの詳細を確認します。