ルールベースの機能は、ルール設定とグローバル設定の優先度、リエントラント性、ルール設定の粒度という 3 つの点で異なります。本トピックでは、各特性について説明し、それぞれのルールベースの機能にどの特性が適用されるかを示します。
ルール設定とグローバル設定の優先度
同一機能内では、追加するルール設定の優先度は、ルールが照合される順序のことです。ルール設定が追加されると、ルールリスト内でシーケンス番号が割り当てられます。ルール設定は、シーケンス番号の昇順で照合されます。
すべてのルールベースの機能には、ルール設定とグローバル設定の両方が含まれます。すべてのルール設定は、グローバル設定よりも優先度が高くなります。機能にルール設定とグローバル設定の両方があり、ユーザーリクエストがルール条件に一致する場合、まずルール設定が実行されます。ルール条件に一致しない場合、最後にグローバル設定が実行されます。グローバル設定が空の場合、ESA ノードのデフォルト設定が適用されます。
次の表に、3 つのルール設定とグローバル設定を持つ機能のルールリストを示します。本トピックの例は、このルールリストに基づいています。
シーケンス番号 | ルール設定 | ルール条件 |
1 | ルール設定 1 | 条件 A (不一致) |
2 | ルール設定 2 | 条件 B |
3 | ルール設定 3 | 条件 C |
グローバル設定 | なし | |
実行順序 | ルール設定はシーケンス番号の昇順 (1、2、3 の順) で実行され、グローバル設定は最後に実行されます。 |
ルールベースの機能のリエントラント性
機能モジュールのリエントラント性とは、単一のリクエストの処理中にその機能モジュールを複数回呼び出せるかどうかを示す特性です。リエントラントな機能モジュールへの呼び出しは互いに干渉せず、すべての呼び出しの結果が有効になります。
リエントラントな機能
リクエストの処理中に、リエントラントな機能は複数回呼び出すことができます。呼び出しは互いに干渉せず、すべての呼び出しの結果が有効になります。たとえば、「オリジンリクエストヘッダーの変更」機能はリエントラントです。クライアントリクエストが複数のルール条件に一致する場合、一致した各条件のルール設定が実行されます。
例 1:オリジンリクエストヘッダーの変更
ユーザーリクエストが条件 B と条件 C の両方に一致する場合、ルール設定 2 とルール設定 3 の両方が実行されます。グローバル設定も実行されますが、アクションが設定されていないため効果はありません。その結果、次の 2 つのリクエストヘッダーがユーザーリクエストに追加されます:
animal: catfruit: apple
シーケンス番号 | ルール設定 | ルール条件 | 機能設定 | 実行済み |
1 | ルール設定 1 | 条件 A (不一致) | 名前が | いいえ |
2 | ルール設定 2 | 条件 B | 名前が | はい |
3 | ルール設定 3 | 条件 C | 名前が | はい |
グローバル設定 | なし | なし | はい |
非リエントラントな機能
非リエントラントな機能は、リクエストの処理中に一度しか呼び出すことができません。呼び出しが終了すると、対応する機能モジュールも終了します。クライアントリクエストが複数のルール条件に一致する場合、最初に一致したルール設定のみが実行されます。
例 2:URL の書き換え
ユーザーリクエストが条件 B と条件 C の両方に一致する場合、ルール設定 2 のみが実行されます。ルール設定 2 はシーケンス番号が小さいため、最初に条件 B に一致します。その結果、ユーザーリクエスト URL のパスは /animal に書き換えられます:
元のリクエスト:
http://example.com/test書き換え後のリクエスト:
http://example.com/animal
シーケンス番号 | ルール設定 | ルール条件 | 機能設定 | 実行済み |
1 | ルール設定 1 | 条件 A (不一致) | ユーザーリクエスト URL のパスを | いいえ |
2 | ルール設定 2 | 条件 B | ユーザーリクエスト URL のパスを | はい |
3 | ルール設定 3 | 条件 C | ユーザーリクエスト URL のパスを | いいえ |
グローバル設定 | なし | なし | いいえ |
ルール設定の粒度
ルール設定の粒度には、機能ディメンションとサブ機能ディメンションがあります。この 2 つのディメンションは、サブ機能モジュールの設定が空の場合の動作が異なります。
機能ディメンション
機能ディメンションでは、空のサブ機能設定は他のルールで補完されません。ユーザーリクエストがルール条件に一致すると、設定が空のサブ機能モジュールは、設定が追加されなかったかのように実行されます。ルールは機能モジュール全体に適用され、設定は機能モジュール全体で有効になります。
例 3:SSL/TLS ルール (ルール設定が機能ディメンションで有効になる非リエントラントな機能)
ユーザーリクエストが条件 B と条件 C の両方に一致すると仮定します。ルール設定 2 はシーケンス番号が小さいため、最初に条件 B に一致し、ルール設定 2 のみが実行されます。ルール設定 2 で - と表示されている設定 (TLS 暗号スイートなど) は、デフォルト設定に基づいて有効になります。
シーケンス番号 | ルール設定 | ルール条件 | SSL/TLS 暗号化 | TLS 暗号スイートとプロトコルバージョンの設定 | OCSP ステープリング | HTTP/2 | HTTP/3 (QUIC) | 実行済み |
1 | ルール設定 1 | 条件 A (不一致) | 有効 | - | 無効 | 無効 | 無効 | いいえ |
2 | ルール設定 2 | 条件 B | 有効 | - | 無効 | 無効 | 無効 | はい |
3 | ルール設定 3 | 条件 C | 有効 | - | 有効 | 有効 | 有効 | いいえ |
グローバル設定 | なし | 無効 | - | 無効 | 有効 | 有効 | いいえ |
サブ機能ディメンション
サブ機能ディメンションでは、空のサブ機能設定は後続のルールによって補完されます。ユーザーリクエストがルール条件に一致すると、設定が空のサブ機能モジュールは、サブ機能設定が空でないルール条件に一致するまで、後続のルール条件との照合を続けます。ルールはサブ機能モジュールに適用され、設定はそのサブ機能モジュールで有効になります。
例 4:キャッシュルール (ルール設定がサブ機能ディメンションで有効になる非リエントラントな機能)
次の例では、ルールリストを 5 つのルール設定 (条件 A から条件 E) に拡張した、キャッシュルールの設定を示します。ユーザーリクエストが条件 B、条件 C、および条件 D に一致すると仮定します。ルール条件はシーケンス番号の昇順で照合され、設定されていない設定項目はグローバルのデフォルト設定に基づいて実行されます。次の表では、各サブ機能が個別の列になっており、「最終的に有効な設定」行に示すように、それぞれの値が独立して決定されます。
シーケンス番号 | ルール設定 | ルール条件 | キャッシュ適格性 | ブラウザキャッシュ TTL | エッジキャッシュ TTL | カスタムキャッシュキー | ポートキャッシュ | 期限切れレスポンスのキャッシュ | [キャッシュ保持] |
1 | ルール設定 1 | 条件 A (不一致) | キャッシュ対象 | - | オリジンサーバーのキャッシュポリシーに従う (存在する場合)。それ以外の場合はキャッシュしない。 | - | - | 無効 | - |
2 | ルール設定 2 | 条件 B | キャッシュ対象 | - | オリジンサーバーのキャッシュポリシーに従う (存在する場合)。それ以外の場合はキャッシュしない。 | - | - | 無効 | - |
3 | ルール設定 3 | 条件 C | キャッシュをバイパス | キャッシュしない | - | - | - | - | - |
4 | ルール設定 4 | 条件 D | キャッシュ対象 | - | オリジンサーバーのキャッシュポリシーを無視し、1 時間のカスタムキャッシュ TTL を使用する。 | クエリストリングを無視 | - | 無効 | - |
5 | ルール設定 5 | 条件 E | キャッシュ対象 | - | - | - | - | 無効 | - |
グローバル設定 | なし | - | - | - | - | デフォルトで無効 | - | デフォルトで無効 | |
最終的に有効な設定 | キャッシュ対象 | キャッシュしない | オリジンサーバーのキャッシュポリシーに従う (存在する場合)。それ以外の場合はキャッシュしない。 | クエリストリングを無視 | 無効 | 無効 | 無効 |
各機能の特性
次の表に、各ルールベースの機能のルール設定におけるリエントラント性、粒度、および優先度を、機能カテゴリ別にまとめます。
機能カテゴリ | ルールベースの機能 | リエントラント性 | ルール設定の粒度 | ルール設定の優先度 |
SSL/TLS | 非リエントラント | 機能 | ルールリストのシーケンス番号に基づきます。シーケンス番号が小さいほど、優先度が高くなります。 | |
非リエントラント | サブ機能 | ルールリストのシーケンス番号に基づきます。シーケンス番号が小さいほど、優先度が高くなります。 | ||
変換ルール | 非リエントラント | 機能 | ルールリストのシーケンス番号に基づきます。シーケンス番号が小さいほど、優先度が高くなります。 | |
リエントラント | サブ機能 | ルールリストのシーケンス番号に基づきます。シーケンス番号が小さいほど、優先度が高くなります。 | ||
リエントラント | サブ機能 | ルールリストのシーケンス番号に基づきます。シーケンス番号が小さいほど、優先度が高くなります。 | ||
リダイレクト | 非リエントラント | 機能 | ルールリストのシーケンス番号に基づきます。シーケンス番号が小さいほど、優先度が高くなります。 | |
[キャッシュ] | 非リエントラント | サブ機能 | ルールリストのシーケンス番号に基づきます。シーケンス番号が小さいほど、優先度が高くなります。 | |
コンテンツ最適化 | 非リエントラント | サブ機能 | ルールリストのシーケンス番号に基づきます。シーケンス番号が小さいほど、優先度が高くなります。 | |
非リエントラント | サブ機能 | ルールリストのシーケンス番号に基づきます。シーケンス番号が小さいほど、優先度が高くなります。 | ||
非リエントラント | サブ機能 | ルールリストのシーケンス番号に基づきます。シーケンス番号が小さいほど、優先度が高くなります。 | ||
ネットワーク最適化 | 非リエントラント | サブ機能 | ルールリストのシーケンス番号に基づきます。シーケンス番号が小さいほど、優先度が高くなります。 | |
オリジン | 非リエントラント | サブ機能 | ルールリストのシーケンス番号に基づきます。シーケンス番号が小さいほど、優先度が高くなります。 | |
設定管理 | 非リエントラント | 機能 | ルールリストのシーケンス番号に基づきます。シーケンス番号が小さいほど、優先度が高くなります。 | |
トラフィック | 非リエントラント | 機能 | ルールリストのシーケンス番号に基づきます。シーケンス番号が小さいほど、優先度が高くなります。 | |
非リエントラント | 機能 | ルールリストのシーケンス番号に基づきます。シーケンス番号が小さいほど、優先度が高くなります。結果は [終了] アクションが設定されているかどうかにも依存します。 [終了] アクションが設定されている場合、最初に一致したルールが実行された後に照合は終了し、それ以上の照合は行われません。 [終了] アクションが設定されておらず、複数のルール条件に一致した場合は、最後に一致したルールの機能設定が有効になります。 | ||
セキュリティ保護 | 非リエントラント | 機能 | ルールリストのシーケンス番号に基づきます。シーケンス番号が小さいほど、優先度が高くなります。 | |
非リエントラント | 機能 | ルールリストのシーケンス番号に基づきます。シーケンス番号が小さいほど、優先度が高くなります。 | ||
非リエントラント | 機能 | ルールリストのシーケンス番号に基づきます。シーケンス番号が小さいほど、優先度が高くなります。 | ||
非リエントラント | 機能 | ルールリストのシーケンス番号に基づきます。シーケンス番号が小さいほど、優先度が高くなります。 | ||
非リエントラント | 機能 | ルールリストのシーケンス番号に基づきます。シーケンス番号が小さいほど、優先度が高くなります。 | ||
非リエントラント | 機能 | ルールリストのシーケンス番号に基づきます。シーケンス番号が小さいほど、優先度が高くなります。 | ||
非リエントラント | 機能 | ルールリストのシーケンス番号に基づきます。シーケンス番号が小さいほど、優先度が高くなります。 |