送信レスポンスヘッダーやリクエストヘッダーの変更など、特定の CDN 機能を設定する際に、変数を使用して現在のリクエストやレスポンスのコンテキストを取得できます。変数は、リクエストメソッド、URL、クライアント IP アドレスなどの値を返し、きめ細かな制御を可能にします。このトピックでは、CDN がサポートするすべての変数について、各変数の値の例と注意事項を説明します。
変数の概要
CDN 変数は、有効ドメインによって、アクセスドメイン変数、オリジンフェッチドメイン変数、レスポンス変数に分類されます:
アクセスドメイン変数: CDN ノードがクライアントリクエストを処理し、キャッシュキーを生成するアクセスドメインで有効になる変数です。
オリジンフェッチドメイン変数: オリジンフェッチ中に有効になる変数です。一部の機能はオリジンフェッチドメインモジュールにデプロイされます。この場合、アクセスドメイン変数は有効にならず、オリジンフェッチドメイン変数に置き換える必要があります。
レスポンス変数: これらの変数を使用して、オリジンサーバーが CDN ノードに返すレスポンスヘッダーを取得できます。
次の表に、各有効ドメインの変数グループと変数を示します:
有効ドメイン | 変数グループ | 変数 |
アクセスドメイン |
| |
アクセスドメイン |
| |
アクセスドメイン |
| |
アクセスドメイン |
| |
アクセスドメイン |
| |
アクセスドメイン |
| |
アクセスドメイン |
| |
アクセスドメイン |
| |
アクセスドメイン |
| |
アクセスドメイン |
| |
アクセスドメイン |
| |
アクセスドメイン |
| |
オリジンフェッチドメイン |
| |
オリジンフェッチドメイン |
| |
レスポンス変数 |
|
変数をサポートする機能
アクセスドメインの機能
オリジンフェッチドメインの機能
制限事項
変数を参照する前に、すべての変数に適用される以下の条件と制限事項を確認してください:
SSL/TLS 変数は HTTPS リクエストにのみ適用されます。HTTP リクエストでこれらの変数を参照した場合、その値は空になります。
$ssl_client_*変数は、クライアント証明書検証 (相互認証、または mTLS) が設定されている場合にのみ値を持ちます。標準の HTTPS リクエストでは、その値は空になります。GeoIP 解決には精度の制限があります。市レベルおよび経度/緯度のフィールドは、通常、市の中心を識別するものであり、正確なジオフェンシングを必要とするブロッキングのユースケースには適していません。クライアント IP アドレスが識別できない場合、関連フィールドはデフォルト値を返します (たとえば、国コードは
XXを返し、数値コード値は0を返します)。$uriは、リダイレクトや内部書き換えなど、CDN の内部リクエストルーティングロジックによって変更される可能性があります。この変数の使用は推奨されません。変更されていないパスを取得するには、$raw_uriを使用してください。
ヘッダー変数の命名規則
CDN が HTTP リクエストヘッダーとレスポンスヘッダーを処理する際、それらを自動的に内部変数にマッピングします。変数名は、以下の規則に従う必要があります:
固定プレフィックス: すべてのリクエストヘッダー変数は
$http_で始まり、すべてのレスポンスヘッダー変数は$sent_http_で始まる必要があります。小文字への変換: ヘッダー名に含まれるすべての大文字は小文字に変換する必要があります。
ハイフンの置換: ヘッダー名に含まれるすべてのハイフン (
-) はアンダースコア (_) に置き換える必要があります。
変換例:
元のヘッダー名 | 変換後の変数 |
Accept-Language |
|
X-Forwarded-For |
|
X-Customize-Header |
|
アクセスドメインの変数
リクエストメソッド
$request_method
意味: 現在のリクエストで使用されている HTTP リクエストメソッドです。
値の例:
GET、POST、HEAD、PUT、DELETEなど。
HTTP バージョン
$server_protocol
意味: 現在のリクエストで使用されている HTTP プロトコルバージョンです。
値の例:
HTTP/1.1、HTTP/2.0。
URI
$uri
意味: 現在のリクエストの URL パスです (クエリパラメーターを除く)。
値の例:
/1.txt。注: この値は、リダイレクトや内部書き換えなど、CDN の内部リクエストルーティングロジックによって変更される可能性があります。この変数の使用は推奨されません。変更されていないパスを取得するには、
$raw_uriを使用してください。
$raw_uri
意味: 元のリクエストの URL パスです (クエリパラメーターを除く)。CDN の内部リクエストルーティングロジックはこの値を変更しません。
値の例:
/1.txt。
$request_uri
意味: 元のリクエストの完全な URL パスです (クエリパラメーターを含む)。
値の例:
/1.txt?chapter=1&flag=on。
リクエストパラメーター
$args
意味: URL 内の完全なクエリパラメーター文字列です (
?を除く)。値の例:
chapter=1&flag=on。
$arg_<parameter-name>
意味: URL クエリパラメーター内の特定のパラメーターの値です。
<parameter-name>を実際のパラメーター名に置き換えてください。値の例:
$arg_flagは URL/1.txt?chapter=1&flag=onから値を抽出します。パラメーターflagの値はonです。
リクエストヘッダー
$http_<request-header-name>
意味: クライアントリクエスト内の特定の HTTP リクエストヘッダーの値です。
<request-header-name>を実際のリクエストヘッダー名に置き換えてください。値の例:
$http_user_agentは User-Agent リクエストヘッダーの値を表し、$http_refererは Referer リクエストヘッダーの値を表します。注: リクエストヘッダーの変数名は、ヘッダー変数の命名規則に従う必要があります。
ドメイン名
$host
意味: クライアントリクエスト内の元のドメイン名で、
Host: <domain-name>リクエストヘッダーの値です。値の例:
www.example.com。
リクエストプロトコル
$scheme
意味: 現在のリクエストで使用されているプロトコルタイプです。
値の例:
httpまたはhttps。
IP アドレスとポート
$remote_addr
意味: クライアント IP アドレスです。
値の例:
30.40.XX.XXX。
$remote_port
意味: クライアントポート番号です。
値の例:
63213。
$x_server_addr
意味: 宛先 IP アドレスで、CDN ノードが外部に公開する仮想 IP アドレス (VIP) です。
値の例:
122.228.XX.XXX。
$x_server_port
意味: 宛先ポートで、CDN ノードが外部に公開するサービスポートです。
値の例:
80または443。
IP ジオロケーションとキャリア
CDN はクライアント IP アドレス ($remote_addr) を使用して、そのジオロケーションとキャリア情報を解決します。これらの変数の値は、GeoIP 解決結果に基づいています。GeoIP 解決には精度の制限があります。市レベルおよび経度/緯度のフィールドは、通常、市の中心を識別するものであり、正確なジオフェンシングを必要とするブロッキングのユースケースには適していません。クライアント IP アドレスが識別できない場合、関連フィールドはデフォルト値を返します (たとえば、国コードは XX を返し、数値コード値は 0 を返します)。各ディメンションは、コード (_id サフィックス付き) と英語名 (_en サフィックス付き) の 2 つの値形式を提供します。
$ip_isp_id
意味: クライアント IP アドレスが属するキャリアのコードです。
値の例: China Telecom の場合、
100017。
$ip_isp_en
意味: クライアント IP アドレスが属するキャリアの英語名です。
値の例: China Telecom の場合、
ChinaTelecom。
$ip_country_id
意味: クライアント IP アドレスが属する国またはリージョンのコードです。
値の例: 中国の場合、
CN。
$ip_country_en
意味: クライアント IP アドレスが属する国またはリージョンの英語名です。
値の例: 中国の場合、
China。
$ip_region_id
意味: クライアント IP アドレスが属するリージョンまたは省のコードです。
値の例: 広東省の場合、
440000。
$ip_region_en
意味: クライアント IP アドレスが属するリージョンまたは省の英語名です。
値の例: 広東省の場合、
guangdong。
$ip_city_id
意味: クライアント IP アドレスが属する市のコードです。
値の例: 深センの場合、
440300。
$ip_city_en
意味: クライアント IP アドレスが属する市の英語名です。
値の例: 深センの場合、
shenzhen。
$ip_longitude
意味: クライアント IP アドレスが属する市の経度です。
値の例: 深センの場合、
114.05787。
$ip_latitude
意味: クライアント IP アドレスが属する市の緯度です。
値の例: 深センの場合、
22.54309。
SSL/TLS
SSL/TLS 変数は、HTTPS リクエストに関するセッション情報を提供します。
これらの変数は HTTPS リクエストにのみ適用されます。HTTP リクエストで参照された場合、その値は空になります。
$ssl_client_*変数は、事前にクライアント証明書検証が設定されている必要もあります。標準の HTTPS リクエストでは、その値は空になります。
$ssl_cipher
意味: 現在のリクエストで使用されている暗号スイート (暗号化アルゴリズムの組み合わせ) です。
値の例:
TLS_AES_256_GCM_SHA384。
$ssl_protocol
意味: 現在のリクエストで使用されている SSL/TLS プロトコルバージョンです。
値の例:
TLSv1.3。
$ssl_client_cert
意味: クライアント証明書データです (証明書の内容が返されます)。
$ssl_client_raw_cert
意味: クライアント証明書の生データです (
$ssl_client_certと同じ使用法で、元の証明書テキストが保持されます)。
$ssl_client_serial
意味: クライアント証明書のシリアル番号です。
$ssl_verify
意味: クライアント証明書の検証結果です。検証が成功した場合、値は
SUCCESSです。値の例:
SUCCESS。
$ssl_client_s_dn
意味: クライアント証明書のサブジェクト識別名 (DN) です。
$ssl_client_i_dn
意味: クライアント証明書の発行者識別名 (DN) です。
ノード名
$hostname
意味: 現在のリクエストを処理する CDN ノードのホスト名です。
値の例:
cn2522(実際のノード名が優先されます)。
オリジンフェッチドメインの変数
$scheme、$http_x_client_scheme、$proxy_scheme はすべてプロトコルタイプ (http または https) を返しますが、有効ドメインとそれぞれが返す値が異なります:
変数 | 有効ドメイン | 説明 |
| アクセスドメイン | 現在のリクエストで使用されるプロトコルタイプ |
| オリジンフェッチドメイン | クライアントがリクエストを開始するために使用するプロトコルタイプ (クライアントスキーム) |
| オリジンフェッチドメイン | CDN ノードがオリジンフェッチに使用するプロトコルタイプ (オリジンフェッチスキーム) |
プロトコル
$http_x_client_scheme
意味: クライアントがリクエストを開始するために使用するプロトコルタイプ (クライアントスキーム) です。
値の例:
httpまたはhttps。
$proxy_scheme
意味: CDN ノードがオリジンフェッチに使用するプロトコルタイプ (オリジンフェッチスキーム) です。
値の例:
httpまたはhttps。
オリジンサーバー
$proxy_source
意味: 現在のリクエストが実際にオリジンフェッチのために送信されるオリジンサーバーのアドレスです。
値の例:
origin.example.comまたは192.0.2.1。
オリジンレスポンスヘッダー
$sent_http_<response-header-name>
意味: オリジンレスポンス内の特定の HTTP レスポンスヘッダーの値です。
<response-header-name>を実際のレスポンスヘッダー名に置き換えてください。値の例:
$sent_http_content_typeは、オリジンサーバーからのContent-Typeレスポンスヘッダーの値 (text/htmlなど) を表します。注: レスポンスヘッダーの変数名は、ヘッダー変数の命名規則に従う必要があります。