ルールエンジンは、条件付きルールを設定するためのグラフィカルユーザーインターフェイスを提供します。これらのルールは、ユーザーからのリクエストに含まれるパラメーターを分析し、特定の構成が適用されるかどうかを判断します。これにより、CDN および の構成ポリシーの実行を柔軟かつ正確に制御できます。
背景情報
Alibaba Cloud CDN および コンソールでは、キャッシュ有効期限ルールやパラメーター書き換えなど、ほとんどの要件に対応する基本機能を提供しています。ただし、/example というパスを含むリクエストを特定のオリジンサーバーアドレスにルーティングするなどの特殊な要件がある場合は、カスタム構成のためにルールエンジンを使用してください。また、Alibaba Cloud CDN および では、高度な柔軟性を備えたカスタマイズが可能な EdgeScript 機能も提供しています。
機能 | 基本機能 | 基本機能 + ルールエンジン | EdgeScript |
機能の実装方法 | 汎用的な構成 | 柔軟なカスタム構成 | 高度に柔軟なカスタム構成 |
利用シーン | 汎用的な要件 | 高度なカスタム要件 | 完全にカスタマイズされた要件 |
使いやすさ(必要な技術知識) | 高 | 中 | 低 |
構成の柔軟性 | 低 | 中 | 高 |
制限事項と注意事項
ドメイン名ごとに最大 50 個のルールを作成できます。
各ルールには最大 20 個のサブルールを含めることができます。
コンソールまたは OpenAPI を使用してルールを構成する場合、正規表現マッチや正規表現不一致を含む正規表現関連のオペレーターは使用できません。ただし、既存の構成は表示可能です。これらのオペレーターを使用するには、チケットを送信するか、Edge Security Acceleration (ESA) を使用してください。
コンソールまたは OpenAPI を使用してルールを構成する場合、単一のドメイン名に対して、すべての機能で合計 5 回までルールを参照できます。
ルールは最大 3 階層までネストできます。各階層では独立した論理関係をサポートします。
他の機能(例:送信リクエストヘッダー)がルールエンジンで構成されたルール条件を参照する場合、実行順序は機能構成の順序ではなく、ルール条件の優先度に従います。
ルール構文
ルールは、論理演算子で接続された 1 つ以上の条件式で構成されます。以下のセクションでは、構文について説明します。
論理演算子
同じ階層内(ネストされた条件セットを含む)の条件に対して論理判断を実行し、and および or をサポートします。
and:論理 AND 演算子です。すべての条件が true の場合にのみ、マッチが成功します。or:論理 OR 演算子です。少なくとも 1 つの条件が true の場合にマッチが成功します。
条件式のパラメーター
基本的な条件式は、以下のパラメーターで構成されます。
パラメーター | ドメイン構成機能の条件および対応する構成パラメーター | 説明 | 必須 |
条件マッチ | match | マッチ条件を指定します。 | はい |
論理演算子 | logic | 条件マッチ式の論理判断パラメーターで、値は | はい |
条件 | criteria | 評価対象の条件式を含む配列です。 | はい |
マッチタイプ | MatchType | クライアントリクエスト内の評価対象情報を指定します。 | はい |
マッチオブジェクト | MatchObject | マッチタイプをさらに絞り込みます。たとえば、マッチタイプがクライアント IP アドレスの場合、 | いいえ |
マッチ演算子 | MatchOperator | 実行する比較を指定します。 | はい |
マッチ値 | MatchValue | クライアントリクエストから取得した情報と比較する値です。 | はい |
条件の否定 | negate | 条件式の結果を否定するかどうかを指定します。有効な値は | はい |
大文字小文字の区別 | caseSensitive | マッチ値の大文字小文字を区別するかどうかを指定します。 | いいえ |
ルール名 | name | ルールの名前です。 | はい |
ステータス | status | ルールのステータスです。 | はい |
条件式
マッチタイプ | ドメイン構成機能の条件パラメーター | 説明 | マッチオブジェクト | マッチ演算子 | 値 | 大文字小文字の区別 | Nginx 変数 |
プロトコル | scheme | クライアントリクエストのプロトコル(HTTP や HTTPS など)です。 | 該当なし |
|
| 該当なし | $scheme |
リクエストメソッド | method | クライアントリクエストのメソッド(GET や PUT など)です。 | 該当なし |
|
| 該当なし | $request_method |
URI | uri | クライアントリクエスト URL のパスで、リクエストパラメーターは含まれません。例: | 該当なし |
|
|
| $raw_uri または $uri |
ファイル名 | basename | クライアントがリクエストしたファイルの名前です。例: | 該当なし |
|
|
| - |
ファイル拡張子 | extension | クライアントがリクエストしたファイルの拡張子は、右から左に向かって最初のピリオド (.) までで識別されます。例: | 該当なし |
|
|
| - |
ホスト名 | hostname | クライアントリクエストのホスト名です。リクエスト URL にホストが存在する場合はそれを使用し、そうでない場合は | 該当なし |
| リクエストのホストです。複数の値がサポートされています。 |
| $host または $http_host |
クライアント IP アドレス | clientip | クライアントの IP アドレスです。値は IPv4 アドレス(例: |
説明 POP 接続 IP および XFF IP の詳細については、「IP アドレス検証モード」をご参照ください。 |
| IPv6 アドレス(例:240e:XXX:3004:2:3:0:0:3f7)および CIDR ブロック(例:120.209.XXX.XXX/31)がサポートされています。複数の値がサポートされています。 | 該当なし | $remote_addr |
クライアント IP バージョン | clientipVer | クライアントアドレスの IP バージョン(IPv4 または IPv6)です。 |
説明 POP 接続 IP および XFF IP の詳細については、「IP アドレス検証モード」をご参照ください。 |
|
| 該当なし | - |
インターネットサービスプロバイダー (ISP) | geolocation | クライアント IP アドレスが属する ISP です。 |
説明 POP 接続 IP および XFF IP の詳細については、「IP アドレス検証モード」をご参照ください。 |
| ドロップダウンリストから ISP を選択するか、文字を入力してオプションをフィルターできます。ID または名前によるあいまい検索がサポートされています。複数の値がサポートされています。 | 該当なし | $ip_isp_id |
IP ジオロケーション | geolocation | クライアント IP アドレスの地理的位置です。 |
説明 POP 接続 IP および XFF IP の詳細については、「IP アドレス検証モード」をご参照ください。 |
| ドロップダウンリストから位置を選択するか、文字を入力してオプションをフィルターできます。ID または名前によるあいまい検索がサポートされています。複数の値がサポートされています。 | 該当なし | $ip_country_id |
リクエストパラメーター | querystring | リクエスト URL のパラメーターです。 | パラメーター名を入力します。 |
|
|
| $arg_{name} |
リクエストヘッダー | header | クライアントリクエストのヘッダーです。 | パラメーター名を入力するか、ドロップダウンリストからパラメーターを選択します。 |
| 複数の値がサポートされています。 |
| $http_{name} |
Cookie | cookie | クライアントリクエストの Cookie です。 | Cookie 名を入力します。 |
|
|
| $cookie_{name} |
User-Agent | useragent | クライアントリクエストの User-Agent ヘッダーです。 | 該当なし |
| ドロップダウンリストから値を選択するか、UA 値(例: |
| $http_user_agent |
Range バケット | range | クライアントリクエストの指定されたパーセントをマッチします。 | 該当なし |
| パーセント値を入力します。 | 該当なし | - |
時間 | time | クライアントリクエストが発生する時刻です。時刻は UTC + 08:00 タイムゾーンです。例: | 該当なし |
| 時間範囲(例: | 該当なし | - |
Nginx 変数 | ngxvar | 前述の変数が要件を満たさない場合は、Nginx 変数を使用できます。詳細については、Nginx 公式ドキュメントをご参照ください。 | ドロップダウンリストから変数を選択するか、変数名を入力します。連結もサポートされています(例: |
| 複数の値がサポートされています。 | 該当なし | ${name} |
IP アドレス検証モード
ルールエンジンには 2 種類の IP アドレス検証モードがあります。選択したモードによって、CDN/ のポイントオブプレゼンス (POP) がクライアント IP アドレスを識別する方法が異なります。
POP 接続 IP:クライアントが CDN ノードに接続するために使用する IP アドレスをマッチします。クライアントと CDN ノードの間にプロキシサーバーが使用されている場合、POP 接続 IP はプロキシサーバーの IP アドレスになります。
XFF IP:このモードでは、
x-forwarded-forリクエストヘッダーの最も左側の IP アドレスをマッチします。XFF IP は、クライアントと CDN ノードの間にプロキシサーバーが使用されているかどうかに関係なく、常にクライアントの実際の IP アドレスになります。
検証モードの選択は、クライアントリクエストが CDN/ POP に到達する前にプロキシサーバーを通過するかどうかによって異なります。
CDN ノード上のルール条件を参照する機能の実行場所も、「IP アドレス検証モード」の選択に影響することに注意してください(オリジン設定に関連し L2 ノードで有効になる機能の場合、ユーザーのリクエストが通過する L1 ノードは中間プロキシサーバーと同等になります)。
例:クライアントの実際の IP アドレスが 10.10.10.10、プロキシサーバーの IP アドレスが 192.168.0.1 であると仮定します。
プロキシサーバーなしの場合:
x-forwarded-forリクエストヘッダーの値は10.10.10.10です。実際のクライアント IP(x-forwarded-for リクエストヘッダーの左端の IP) = クライアントが CDN ノードに接続するために使用する IP アドレス =
10.10.10.10です。
プロキシサーバーありの場合:
ユーザーのリクエストにおける
x-forwarded-forリクエストヘッダーの値は10.10.10.10,192.168.0.1です。実際のクライアント IP(x-forwarded-for リクエストヘッダーの最も左側の IP アドレス)は
10.10.10.10です。クライアントから CDN ノードへの接続 IP = プロキシサーバー IP =
192.168.0.1です。元のクライアントの IP アドレスは、CDN/ POP 接続 IP と同一ではありません。
特定の地域の一部の ISP は、クライアントにプライベート IP アドレスを割り当てることがあります。その結果、CDN/ POP がプライベート IP アドレスからのリクエストを受信することがあります。
プライベート IP アドレスの範囲は次の 3 つです。
クラス A:10.0.0.0 ~ 10.255.255.255、サブネットマスク 10.0.0.0/8
クラス B:172.16.0.0 ~ 172.31.255.255、サブネットマスク 172.16.0.0/12
クラス C:192.168.0.0 ~ 192.168.255.255、サブネットマスク 192.168.0.0/16
マッチ演算子
演算子 | ドメイン名構成機能の 条件 構成パラメーター | 説明 |
等しい |
| 変数がマッチ値と完全に一致する場合にのみ、条件が満たされます。 |
等しくない |
| |
存在する |
| 変数が存在する(または存在しない)場合に条件が満たされます。 |
存在しない |
| |
いずれかを含む |
| 変数に指定された一致値のいずれかが含まれている(または含まれていない)場合、条件を満たします。一致値は最大 32 個まで指定できます。 包含マッチには次の 2 種類があります。
|
いずれも含まない |
| |
より大きい |
| つまり、 |
より小さい |
| つまり、 |
以上 |
| つまり、 |
以下 |
| つまり |
正規表現マッチ |
| システムは、マッチ値を正規表現として使用して変数を評価します。 説明 コンソールまたは API オペレーションを呼び出して、 |
正規表現不一致 |
|
ワイルドカード
ワイルドカード | 説明 |
| 1 文字にマッチします。 |
| 0 文字以上の任意の文字にマッチします。 |
条件付き機能
カテゴリ | 機能 |
基本構成 | |
キャッシュ設定 | |
オリジン設定 | |
アクセス制御 | |
パフォーマンス最適化 | |
動画設定 | |
トラフィック速度制限 |
操作手順
-
CDN コンソールにログインします。
-
左側のナビゲーションウィンドウで、ドメイン名 をクリックします。
-
[ドメイン名] ページで、対象のドメイン名を見つけ、[操作] 列の [管理] をクリックします。
ドメインの左側ナビゲーションウィンドウで、ルールエンジン をクリックします。
ルールの追加 をクリックします。
[ルールの追加] ページで、[ルール名] とルールの内容を設定します。
送信 をクリックします。