すべてのプロダクト
Search
ドキュメントセンター

CDN:ルールエンジン

最終更新日:Sep 19, 2026

ルールエンジンは、条件付きルールを設定するためのグラフィカルユーザーインターフェイスを提供します。これらのルールがユーザーリクエストパラメーターを分析し、特定の設定が適用されるかどうかを判断することで、CDN、 の設定ポリシーの適用を柔軟かつ正確にコントロールできます。

背景

Alibaba Cloud CDN コンソールは、キャッシュ有効期限の設定やオリジンフェッチパラメーターの書き換えなどの基本機能を提供しており、ほとんどの一般的な要件を満たします。しかし、パスに /example を含むリクエストを指定されたオリジンアドレスからフェッチするなどの特殊な要件については、ルールエンジンを使用してカスタム設定を実装する必要があります。さらに、Alibaba Cloud CDN は、非常に柔軟なカスタマイズをサポートする EdgeScript 機能を提供しています。

機能

基本機能

基本機能とルールエンジン

EdgeScript

機能の実装

汎用的な設定

グラフィカルインターフェイスを使用して、条件付きフィルタリングルールを作成できます。URI、ヘッダー、Cookie、クエリ文字列など、複数のマッチタイプと、AND/OR の論理結合をサポートしています。

柔軟性の高いカスタマイズが可能で、カスタムスクリプティングが必要な高度なシナリオに適しています。

シナリオ

汎用的なシナリオ

高度なカスタムシナリオ

完全なカスタムシナリオ

使いやすさ (必要な技術スキル)

高

中

低

設定の柔軟性

低

中

高

複雑なロジックと EdgeScript

ルールエンジンは基本的な AND/OR の論理結合をサポートしているため、ほとんどの条件付きフィルタリングシナリオに適しています。ただし、次のシナリオは EdgeScript を使用するかどうかを判断する際の参考になります:

  • 複雑な正規表現マッチング:ルールエンジンの正規表現演算子は、デフォルトで無効になっています。有効化を依頼するには、チケットを送信する必要があります。正規表現を頻繁に使用する場合は、EdgeScript が正規表現マッチングをネイティブにサポートしているため、より便利です。

  • 高精度な多次元の組み合わせ:クライアント IP と User-Agent の両方を正規表現でマッチさせるなど、複数の条件を組み合わせた複雑な評価 (例:User-Agent に特定のキーワードが含まれる特定の IP アドレス範囲からのリクエストをブロックする) を設定するのは、ルールエンジンでは煩雑です。EdgeScript では、スクリプトロジックを使用して複数の条件を柔軟に組み合わせることができます。

  • 細かな複数ディレクトリの IP アクセス制御:EdgeScript を使用すると、異なるディレクトリに対して異なる IP アドレス範囲のアクセスを許可できます。たとえば、1 つの IP アドレス範囲にすべてのディレクトリへのアクセスを許可し、特定の IP アドレスには 1 つのディレクトリへのみアクセスを許可し、それ以外の IP アドレスはすべて拒否できます。 match_re を使用して IP アドレスと URI パスをマッチさせます。 return true を使用してリクエストを許可し、 exit(403) を使用して拒否します。

制限

  • ドメイン名ごとに最大 50 個のルール条件を作成できます。

  • 各ルール条件には、最大 20 個のサブルールを含めることができます。

  • コンソールまたは OpenAPI でルール条件を設定する際に、正規表現一致演算子または正規表現不一致演算子を使用することはできません。ただし、これらの演算子を使用している既存の設定は表示できます。これらの演算子を使用するには、ESA を使用してください。

  • 1つのドメイン名内のすべての機能において、ルール条件を参照できる合計回数は最大 5 回です。

  • ルール条件は最大 3 レベルまでネストでき、各レベルで独立した論理関係を設定できます。

  • キャッシュの有効期限の設定や送信リクエストヘッダーの変更などの機能がルール条件を参照する場合、機能の設定順序ではなく、条件の優先度によって実行順序が決まります。

  • 前述の制限事項のうち、ルール条件 (最大 50 個)、サブルール (最大 20 個)、およびネスト (最大 3 レベル) はハードリミットであり、申請により増やすことはできません。1つの高速化ドメイン名内のすべての機能におけるルール条件の総参照回数の上限 (デフォルトは 5 回) は、申請により増やすことができます。

    • 1つのドメイン名あたりのルール条件の総参照回数 (デフォルトは 5 回) を増やすには、チケットを送信 してください。チケットには、制限を増やしたい高速化ドメイン名、目標参照数、およびビジネスシナリオの説明を記載してください。

    • 別の高速化ドメイン名を追加する際には、そのドメインのルール条件の参照数を増やすために別のチケットを送信してください。手順は最初の申請と同様です。

  • クライアント IP、URI、ファイルの拡張子、ファイル名、User-Agent などのマッチタイプでは、各条件に最大 32 個のマッチ値を設定できます。大規模なクライアント IP 許可リストがある場合は、複数の IP アドレスを CIDR ブロック (例: 120.209.XXX.X/24) に統合して IP アドレスを設定し、マッチ値の数を節約してください。

  • 最大 32 個の User-Agent マッチ値を設定できます。この制限を超える値は無視されます。多数の User-Agent をマッチングするには、ワイルドカード (*) を使用して類似した User-Agent 値を統合してください (例: *Chrome* はすべての Chrome ブラウザバージョンにマッチします)。または、より柔軟なマッチングロジックを実現するために EdgeScript を使用してください。

機能の優先度と実行ロジック

ルールエンジンを設定する際は、次の機能の優先度と実行ロジックを考慮してください:

  • Referer ホットリンク保護はルールエンジンより優先されます:リクエストに Referer ヘッダーが含まれている場合、システムはまず Referer ブラックリストに照らしてリクエストを評価します。リクエストがブラックリストに一致する場合はブロックされます。一致しない場合は、次に Referer ホワイトリストに照らして評価します。ホワイトリストに一致するリクエストは許可され、ルールエンジンをバイパスして処理が続行されます。ホワイトリストに一致しないリクエストはブロックされます。Referer ヘッダーが空の場合、リクエストはこのロジックをバイパスし、ルールエンジンによって評価されます。

  • ルール条件を使用する機能の実行順序:キャッシュ有効期限やアウトバウンドリクエストヘッダーの変更などの機能がルール条件を使用する場合、システムは機能の設定順序ではなく、関連するルール条件の優先度に基づいて実行します。たとえば、キャッシュ有効期限とオリジンリクエストパラメーターの書き換えが異なる優先度のルール条件を使用する場合、システムはルール条件の優先度順 (高いものから低いものへ) に実行します。

  • URL 認証とキャッシュ間の競合のトラブルシューティング:URL 認証を設定した後に、認証パラメーターなしでリクエストにアクセスできてしまう、または有効なリンクが誤ってブロックされるなどの予期しない動作が発生した場合は、次の項目を順に確認してください:

    1. WAF ホワイトリストが設定されているかどうかを確認してください。WAF ホワイトリストは、 CDN および の認証ロジックをバイパスして、リクエストを直接通過させる可能性があります。

    2. URL パラメーターの無視機能によって auth_key などの認証パラメーターが除外されていないことを確認してください。この設定によって認証パラメーターが除外されると、キャッシュヒットに対する認証検証がスキップされます。

    3. キャッシュキールールが認証パラメーターを無視していないことを確認してください。無視している場合、異なる認証パラメーターを持つリクエストが同じキャッシュされたコンテンツを受け取る可能性があり、事実上、認証がバイパスされます。

ルール条件の構文

ルール条件は、論理演算子を使用して 1 つ以上の条件式を組み合わせたものです。本セクションでは、構文について説明します。

論理演算子

論理演算子は、ネストされた条件セットを含め、同一レベルの条件を評価します。サポートされている演算子は and と or です。

  • and (AND):論理 AND 演算子。すべての条件が true の場合にのみ一致します。

  • or (OR): 論理 OR 演算子です。いずれかの条件が true の場合に一致します。たとえば、同じレスポンスヘッダーに複数のルール条件を設定すると、異なる条件で同じレスポンスヘッダーを追加できます。例: URI に /path-a [または] /path-b が含まれる場合、レスポンスヘッダーを追加します。

条件式のパラメーター

条件式はルールの最小単位であり、以下のパラメーターが含まれます。

パラメーター

ドメイン名設定の条件 関数における対応する設定 パラメーター

説明

必須

条件一致

match

条件一致式を指定します。

はい

論理演算子

logic

条件一致式の論理演算子を指定します。有効な値は and および or です。

はい

基準

criteria

評価対象となる条件式の配列を指定します。

はい

一致タイプ

MatchType

クライアントリクエストで照合する情報のタイプを指定します。

はい

一致オブジェクト

MatchObject

一致タイプをさらに絞り込みます。例えば、クライアント IP アドレスは POP 接続 IP または XFF IP として指定できます。

いいえ

一致演算子

MatchOperator

実行する比較を指定します。

はい

一致値

MatchValue

クライアントリクエストのデータと比較する値を指定します。

はい

条件の否定

negate

条件式の結果を否定するかどうかを指定します。有効な値は true と false です。

はい

大文字と小文字の区別

caseSensitive

一致値の大文字と小文字を区別するかどうかを指定します。

いいえ

ルール条件名

name

ルール条件の名前を指定します。

はい

ステータス

status

ルール条件のステータスを指定します。

はい

条件式の設定

一致タイプ

ドメイン名設定の 条件 関数における対応する設定パラメーター

説明

一致対象

一致演算子

一致値

大文字と小文字の区別

対応する Nginx/Tengine 変数

プロトコル

scheme

HTTP や HTTPS など、クライアントリクエストで使用されるプロトコルです。

該当なし

  • 等しい

  • 等しくない

  • http

  • https

該当なし

$scheme

リクエストメソッド

method

GET や PUT など、クライアントリクエストで使用されるリクエストメソッドです。

該当なし

  • 等しい

  • 等しくない

  • get

  • put

  • post

  • delete

  • head

該当なし

$request_method

URI (パス)

uri

リクエストパラメーターを除いた、クライアントリクエスト URL のパスです。たとえば、/favicon.ico のようになります。

該当なし

  • いずれかを含む

  • いずれも含まない

ワイルドカードとして、? と * がサポートされています。たとえば、/*/my_path/* のように入力します。複数の値がサポートされています。

  • 大文字と小文字を区別する

  • 大文字と小文字を区別しない

$raw_uri または $uri

ファイル名

basename

クライアントがリクエストするファイルの名前です。例: name1。

該当なし

  • いずれかを含む

  • いずれも含まない

ワイルドカード ? および * がサポートされています。複数の値を入力できます。

  • 大文字と小文字を区別する

  • 大文字と小文字を区別しない

-

拡張子

extension

クライアントがリクエストしたファイルのファイル拡張子です。システムは、ファイル名の最後のドット (.) から末尾までの部分文字列を拡張子として識別します。例: .mp4。

該当なし

  • いずれかを含む

  • いずれも含まない

サポートされているワイルドカードは ? と * です。複数の値を入力できます。

  • 大文字と小文字を区別する

  • 大文字と小文字を区別しない

-

ホスト名

hostname

クライアントリクエストのホスト名です。一致の優先順位:リクエスト URL の host > Host リクエストヘッダーの host。

該当なし

  • いずれかを含む

  • いずれも含まない

クライアントリクエストの host を入力します。複数の値を入力できます。

  • 大文字と小文字を区別する

  • 大文字と小文字を区別しない

$host または $http_host

クライアント IP アドレス

clientip

クライアントの IP アドレスです。IPv4 (例: 1.1.X.X)、IPv6 (例: 240e:95c:3004:2:3:0:0:XXX)、および CIDR ブロック (例: 20.209.XXX.XXX/31) がサポートされています。

  • POP 接続 IP

  • XFF IP

説明

POP 接続 IP と XFF IP の詳細については、「.」をご参照ください。

  • いずれかを含む

  • いずれも含まない

240e:XXX:3004:2:3:0:0:3f7 などの IPv6 アドレスや、120.209.XXX.XXX/31 などの CIDR ブロックに対応しています。複数の値を入力できます。

該当なし

$remote_addr

クライアント IP バージョン

clientipVer

クライアントの IP アドレスのバージョンです:IPv4 または IPv6。

  • POP 接続 IP

  • XFF IP

説明

POP 接続 IP と XFF IP の詳細については、「.」をご参照ください。

  • 等しい

  • 等しくない

  • v4

  • v6

該当なし

-

インターネットサービスプロバイダー (ISP)

geolocation

クライアント IP アドレスの ISP です。

  • POP 接続 IP

  • XFF IP

説明

POP 接続 IP と XFF IP の詳細については、「.」をご参照ください。

  • いずれかを含む

  • いずれも含まない

ドロップダウンリストから ISP を選択するか、文字を入力して候補を絞り込むことができます。ID または名前によるあいまい検索に対応しています。複数の値を入力できます。

該当なし

$ip_isp_id

IP ジオロケーション

geolocation

クライアント IP アドレスの地域情報です。

  • POP 接続 IP

  • XFF IP

説明

POP 接続 IP と XFF IP の詳細については、「.」をご参照ください。

  • いずれかを含む

  • いずれも含まない

ドロップダウンリストからロケーションを選択するか、文字を入力して候補を絞り込むことができます。ID または名前によるあいまい検索に対応しています。複数の値を入力できます。

該当なし

$ip_country_id

リクエストパラメーター

querystring

リクエスト URL のパラメーターです。

パラメーター名を入力します。

  • 存在する

  • 存在しない

  • いずれかを含む

  • いずれも含まない

  • 次より大きい

  • 次以上

  • 次より小さい

  • 次以下

ワイルドカードの ? と * がサポートされています。複数の値を入力できます。

  • 大文字と小文字を区別する

  • 大文字と小文字を区別しない

$arg_{name}

リクエストヘッダー

header

クライアントリクエストのヘッダーです。

パラメーター名を入力するか、ドロップダウンリストからパラメーターを選択できます。

  • 存在する

  • 存在しない

  • いずれかを含む

  • いずれも含まない

  • 次より大きい

  • 次以上

  • 次より小さい

  • 次以下

複数の値を入力できます。

  • 大文字と小文字を区別する

  • 大文字と小文字を区別しない

$http_{name}

Cookie

cookie

クライアントリクエストの Cookie です。

Cookie 名を入力します。

  • 存在する

  • 存在しない

  • いずれかを含む

  • いずれも含まない

  • 次より大きい

  • 次以上

  • 次より小さい

  • 次以下

ワイルドカードの ? と * に対応しています。 複数の値を入力できます。

  • 大文字と小文字を区別する

  • 大文字と小文字を区別しない

$cookie_{name}

User-Agent

useragent

リクエストヘッダーの User-Agent です。

該当なし

  • いずれかを含む

  • いずれも含まない

ドロップダウンリストから値を選択するか、*Chrome/25* のような User-Agent 値を入力できます。 ワイルドカードの ? と * がサポートされています。 複数の値を入力できます。 最大 32 個の User-Agent 値を設定できます。 この制限を超えると、設定は有効になりません。

  • 大文字と小文字を区別する

  • 大文字と小文字を区別しない

$http_user_agent

レンジバケット

range

指定した割合のクライアントリクエストに一致します。

該当なし

  • 等しい

  • 等しくない

割合の値を入力します。

該当なし

-

時間

time

クライアントリクエストが発生した時刻です。時刻は UTC+8 です。例: 09:10~14:22。

該当なし

  • いずれかを含む

  • いずれも含まない

09:10~14:22 などの時間範囲を入力します。これは 09:10 から 14:22 までの期間を表します。

該当なし

-

Nginx 変数

ngxvar

前述の変数で要件を満たせない場合は、Nginx 変数を使用します。サポートされている変数の一覧については、Nginx の公式ドキュメントをご参照ください。

ドロップダウンリストから変数を選択するか、変数名を入力できます。連結もサポートされています (例: $region:$isp)。

  • 存在する

  • 存在しない

  • いずれかを含む

  • いずれも含まない

  • 次より大きい

  • 次以上

  • 次より小さい

  • 次以下

複数の値を入力できます。

該当なし

${name}

条件式設定の一般的な注意事項

  • URI (パス) の一致開始点: URI 照合の場合、値はドメイン名とリクエストパラメーターを除いた、ドメイン名以降のパスにおける最初の / から始まるパス部分です。たとえば、リクエスト https://example.com/path/file.html?key=value の場合、実際に照合される URI 値は /path/file.html です。照合値は / で始まる必要があります。

  • ファイル拡張子の一致形式: ファイル拡張子の一致を設定する場合、一致する値にはドット (.) を含める必要があります。たとえば、.txt ファイルと一致させるには、txt ではなく .txt と入力します。そうしないと、一致しない場合があります。

  • ワイルドカードの使用例: URI とファイル拡張子の一致では、ワイルドカード ? (任意の 1 文字に一致) と * (任意の数の文字に一致) がサポートされています。一般的な例:

    • /*.pdf: ルートディレクトリ内のすべての PDF ファイルに一致します。

    • /api/*/data: /api/ で始まり、任意のサブパスに data を含むパスに一致します。

    • .??: .js や .ts など、すべての 2 文字のファイル拡張子に一致します。

IP アドレス検証モード

ルールエンジンには 2 つの IP アドレス検証モードがあり、選択したモードによって CDN POP がクライアント IP アドレスを識別する方法が異なります。

  • POP 接続 IP:このモードは、クライアントが CDN POP に接続するために使用する IP アドレスに一致します。クライアントと CDN POP 間のトラフィックがプロキシサーバーを通過する場合、POP 接続 IP はプロキシサーバーの IP アドレスになります。

  • XFF IP:このモードは、x-forwarded-for リクエストヘッダー内の左端の IP アドレスを照合します。クライアントと CDN POP の間にプロキシサーバーが使用されているかどうかにかかわらず、XFF IP は常にクライアントの実際の IP アドレスになります。

認証モードの選択は、クライアントリクエストがプロキシサーバーを通過してから CDN POP に到達するかどうかによって決まります。

ルール条件を参照する機能が有効になる CDN POP のロケーションは、選択すべき IP アドレス検証モードにも影響することにご注意ください。 L2 POP で有効になるオリジンフェッチ機能の場合、ユーザーリクエストが経由する L1 POP は中間プロキシサーバーに相当します。

例:クライアントの実際の IP アドレスを 10.10.10.10、プロキシ IP アドレスを 192.168.0.1 とします。

  • プロキシサーバーなしの場合:

    • x-forwarded-for リクエストヘッダーの値は10.10.10.10です。

    • クライアントのリアル IP アドレス (x-forwarded-for リクエストヘッダーの左端の IP) = クライアントと CDN POP 間の接続を確立するために使用される 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 POP 間の接続確立に使用される IP アドレス = プロキシサーバーの IP アドレス = 192.168.0.1。

    • クライアントのリアル IP アドレス (x-forwarded-for リクエストヘッダーの左端の IP) は、クライアントが CDN POP との接続を確立する際に使用する IP アドレスとは異なります。

特定のリージョンでは、一部のインターネットサービスプロバイダー (ISP) がエンドユーザーにプライベート IP アドレスを割り当てることがあるため、CDN ノードはユーザーのプライベート IP アドレスを受信します。

説明

プライベート IP アドレスは、以下の 3 つの範囲に分類されます。

  • クラス A プライベート IP アドレス: 10.0.0.0~10.255.255.255。サブネットマスク: 10.0.0.0/8。

  • クラス B プライベート IP アドレス: 172.16.0.0〜172.31.255.255。サブネットマスク: 172.16.0.0/12。

  • クラス C のプライベート IP アドレス: 192.168.0.0~192.168.255.255。サブネットマスク: 192.168.0.0/16。

マッチオペレーター (matchOperator)

演算子

ドメイン名設定の 条件 関数に対応する設定パラメーター

説明

等しい

matchOperator を equals に設定します。

変数が指定された一致する値と完全に等しい、または等しくない場合にのみ条件が満たされます。

等しくない

matchOperator を equals に設定し、negate パラメーターを true に設定します。

存在する

matchOperator を exists に設定します。

指定された変数がリクエスト内に存在するかどうかに応じて、条件が満たされます。

存在しない

matchOperator を exists に設定し、negate パラメーターを true に設定します。

いずれかを含む

matchOperator を contains に設定します。

変数が指定された一致する値の いずれか を含む (または含まない) 場合に条件が満たされます。最大 32 個の一致する値がサポートされています。

2 種類の包含一致がサポートされています。

  • 完全一致: 一致する値を直接入力します。たとえば、a に一致させるには、変数が a と等しい必要があります。

  • ワイルドカード一致: * をワイルドカードとして使用できます。サポートされているパターンには、a*、 *a、 *a* が含まれます。これらは、abc、 bca、 bcabc に一致します。

いずれも含まない

matchOperator を contains に設定し、negate パラメーターを true に設定します。

より大きい

matchOperator を gt に設定します。

つまり、>

より小さい

matchOperator を lt に設定します。

つまり、<

以上

matchOperator を ge に設定します。

すなわち、>=

以下

matchOperator を le に設定します。

つまり、<=

正規表現一致

matchOperator を regex に設定します。

変数を正規表現と照合します。

説明

コンソールまたは OpenAPI でルールを設定する場合、これらの正規表現演算子を使用することはできません。ただし、既存の設定は表示できます。

正規表現不一致

matchOperator を regex に設定し、negate パラメーターを true に設定します。

ワイルドカード

ワイルドカード

説明

パス マッチングの例

?

任意の一文字に一致します。

/img/?.png matches resources whose file name is a single character, such as /img/a.png and /img/b.png.

*

パス区切り文字 (/) を含まない、0 文字以上の任意の文字列に一致します。

/api/* matches all paths under /api/, such as /api/v1/users and /api/v2/products. /static/*.css matches all CSS files in the /static/ directory.

ルール条件をサポートする機能

カテゴリ

機能

基本設定

条件付きオリジンサーバ

キャッシュ設定

キャッシュの有効期限

アウトバウンドレスポンスヘッダーの変更

URL リライト

カスタムキャッシュキー

オリジン設定

オリジンリクエストヘッダーの変更

インカミングレスポンスヘッダーの変更

パラメーターの書き換え

オリジンリクエストの HOST ヘッダー

アクセス制御

Referer ブラックリストまたはホワイトリスト

URL 署名

IP ブラックリストまたはホワイトリスト

User-Agent ブラックリストまたはホワイトリスト

パフォーマンス最適化

パラメーターの無視

動画設定

Range オリジンフェッチ

トラフィックスロットリング

単一リクエストのスロットリング

設定管理

  • 実行アクションの表示場所: [ルールエンジン] のページではルール条件のみを定義します。実行アクションを直接設定するものではありません。キャッシュの有効期限、URL リライト、スロットリングなどの特定の実行アクションは、ルールを参照する機能のページで表示および管理する必要があります。たとえば、キャッシュの有効期限設定がルール条件を参照している場合、[キャッシュ設定] > [キャッシュの有効期限] で表示および変更する必要があります。

  • [リモート認証]はルール条件をサポートしていません: [リモート認証] 機能はルール条件を参照できません。ルールエンジンを使用して、リモート認証が有効になる範囲を制御することはできません。

  • 認証タイムアウトの制限: [リモート認証] 機能の [タイムアウト] は、最大 3000 ミリ秒 (3 秒) に設定できます。デフォルト値は 500 ミリ秒です。3000 ミリ秒は、システムがサポートする最大値です。

高度な使用例

ルールエンジンを使用すると、次の高度な設定を実装できます:

  • 差別化されたレート制限:一部のリクエストにのみレート制限を適用し、他のリクエストには適用しない (たとえば、認証パラメーター付きの URL にはレート制限を適用し、他の URL には適用しない) 場合や、フォールバックのレート制限を設定する場合は、[ルールエンジン] モジュールでリクエストの特性を区別するルール条件を作成します。次に、[単一リクエストのスロットリング] で、異なるルール条件を参照し、それぞれに異なるレート制限を設定します。

  • IP ベースのカナリアオリジンルーティング:クライアント IP アドレスに基づいてカナリアリリースを実装したり、特定の IP からのリクエストを異なるオリジンにルーティングしたりするには、ルールエンジンで IP 一致条件を作成します。次に、[条件付きオリジンサーバ] でそのルール条件を参照し、異なるオリジンアドレスを指定します。

  • 混合オリジンアーキテクチャの推奨:オリジンとして WAF と OSS の両方を使用する必要がある場合は、複数のプライマリオリジンを直接設定しないでください。代わりに、ルールエンジンを使用して URL パスに基づいて一致条件を作成し、[条件付きオリジンサーバ] で各パスのオリジンアドレスを動的に指定して、複数のオリジン間のオリジン競合を回避します。

操作手順

  1. Alibaba Cloud CDN コンソールにログインします。

  2. 左側のナビゲーションペインで [ドメイン名 ] をクリックします。

  3. [ドメイン名] ページで、管理対象のドメイン名を見つけ、[アクション] 列の [管理] をクリックします。

    ドメイン名

  4. 指定したドメイン名の左側メニューで、ルールエンジン をクリックします。

  5. ルールの追加 をクリックします。

  6. ルールの追加 ページで、ルール名 と [ルール内容] を設定します。

  7. 送信 をクリックして設定を完了します。

一般的な設定シナリオ

以下のセクションでは、3 つの一般的な設定シナリオを実装する方法について説明します。

シナリオ 1:IP ホワイトリストによるアクセス制御とホワイトリスト外リクエストのリダイレクト

要件:指定された IP アドレスのみが Web サイトにアクセスできるようにし、他のすべての IP アドレスをメンテナンスページに自動的にリダイレクトします。

設定方法:

  1. [ルールエンジン] モジュールで、ルール条件を作成します。一致タイプを [クライアント IP アドレス] に設定し、一致演算子を [いずれも含まない] に設定して、ホワイトリストに登録された IP アドレスを一致する値として入力します。

  2. [キャッシュ設定] > [アクセス URL リライト] で、このルール条件を参照し、一致するリクエスト (つまり、ホワイトリストにない IP アドレスからのリクエスト) を、OSS でホストされている HTML ページなどの指定されたメンテナンスページの URL にリダイレクトします。

注意事項:

  • ホワイトリストにない IP アドレスからのリクエストがリダイレクトされずに 403 を返す場合は、複数の OSS オリジンがオリジン競合を引き起こしていないか確認してください。各 CDN または ドメイン名は、1 つのプライマリ OSS オリジンにのみマッピングすることを推奨します。

  • メンテナンスページの URL が公開アクセス可能であり、他のアクセス制御ルールによってブロックされていないことを確認してください。

  • デフォルトの動作:IP ホワイトリストのルールが URI パス一致条件に関連付けられている場合、IP ホワイトリストのチェックはその URI パスに一致するリクエストにのみ適用され、一致しないリクエストはデフォルトで許可されます。すべてのパスに IP アクセス制御を適用するには、EdgeScript を使用してカスタムロジックを記述します。

シナリオ 2:Referer 保護とファイル拡張子制御

要件:指定された拡張子のファイルに対する Referer アクセスを制限し、それらの拡張子のファイルに対する空の Referer を持つリクエストは許可します。

設定方法:

  1. [ルールエンジン] モジュールで、ルール条件を作成します。一致タイプを [ファイル拡張子] に設定し、一致演算子を [いずれも含まない] に設定し、除外したい拡張子 (例:.pdf) を一致する値として入力します。

  2. [アクセス制御] > [Referer ホットリンク保護] で、このルール条件を参照します。指定された拡張子以外の拡張子に対するリクエストは Referer のホワイトリストまたはブラックリストによって制限されますが、指定された拡張子に対する空の Referer を持つリクエストは除外されます。

シナリオ 3:画像および動画以外のファイルへのアクセスをブロック

要件:OSS バケットは CDN アクセラレーションを通じて利用可能です。細工された悪意のある URL を介した .html などの非メディアファイルへのアクセスはブロックする必要があります。

設定方法:

  1. [ルールエンジン] モジュールで、ルール条件を作成します。一致タイプを [ファイル拡張子] に設定し、一致演算子を [いずれかを含む] に設定し、.html,.htm,.php,.asp,.jsp を一致する値として入力します。

  2. ルール条件を追加します。[一致タイプ] を「クライアント IP」に、[一致演算子] を「いずれも含まない」に設定し、[一致値] をホワイトリストに登録された IP アドレスに設定します。

  3. [アクセス制御] でこのルール条件を参照し、一致するリクエスト (ホワイトリストに登録されていない IP アドレスから、指定されたファイル拡張子を持つファイルへのリクエスト) に対して 403 を返します。

注 (アップロード制限):

CDN ルールエンジンはアクセスのみを制限し、アップロードを制御することはできません。アップロード中にファイルタイプを制限するには、OSS の PostObject API を使用し、ポリシーを設定してファイルタイプを制限します。たとえば、starts-with $Content-Type image/ を設定すると、.html などの非画像ファイルのアップロードが拒否されます。OSS の PutObject API はファイルタイプをチェックしないため、アップロード中に非メディアファイルをブロックすることはできません。

よくある質問

指定されたオリジンからフェッチする際に Host ヘッダーに設定されたルールは、高度な条件付きルールの制限にカウントされますか?

はい。ドメイン名に適用されるすべてのルールは、高度な条件付きルールの制限にカウントされます。ドメイン名ごとに最大 50 個のルール条件を作成でき、各条件には最大 20 個のサブ条件を含めることができます。

ルールエンジンを設定した後、実行アクションはどこで確認できますか?

ルールエンジン自体は条件を定義するだけで、キャッシュの有効期限、オリジンリクエストパラメーターの書き換え、URL リライトなどの他の機能と組み合わせた場合にのみ有効になります。実行アクションは、関連付けられた特定の機能の設定に反映され、そこで参照されているルールを表示または管理できます。たとえば、まずルール条件を作成して一致ロジックを定義し、次にキャッシュの有効期限でそのルールを参照することで、キャッシュポリシーが一致するリクエストにのみ適用されるようにします。

URL 認証が有効な場合、ルールエンジンを使用してリクエストパラメーターを照合し、動画のダウンロードを制御するにはどうすればよいですか?

URL 認証 (A 認証) が有効な場合、ルールエンジンを使用してリクエストパラメーターを照合し、動作を制御できます。ルールエンジンで「URL が含む」条件を設定して、download=1 などの指定されたビジネスパラメーター名または値に一致させることを推奨します。

説明

通常の認証検証に影響を与えないように、認証パラメーターを一致基準として使用しないでください。ただし、download などの他のビジネスパラメーターは通常どおり照合できます。

生成された URL に、http://.../video.mp4?auth_key=...&download=1 のようにルールと一致するパラメーターが含まれていることを確認し、対応するレスポンスヘッダー設定をトリガーしてダウンロードを制御します。

指定されたパスに一致した後、キャッシュを回避するようにルールエンジンを設定するにはどうすればよいですか?

さまざまな一致要件に合わせて、次のいずれかの設定方法を使用します:

  • ファイル拡張子の場合:キャッシュ設定で、キャッシュすべきでない拡張子に対してキャッシュの有効期限を 0 に設定します。キャッシュすべき拡張子には、4 時間などの適切なキャッシュ期間を設定し、「オリジンを無視しない」、「ヘッダーをキャッシュしない」、「オリジンの Cache-Control に従わない」を選択します。

  • パス一致の場合: CDN コンソールは完全な URL の正規表現一致をサポートしていないため、ルールエンジンを介して URI パス一致を設定します。[一致タイプ] を「URI (パス)」に、[一致演算子] を「いずれかを含む」または「いずれも含まない」に設定し、[一致値] で次のワイルドカードを使用します:? と *。たとえば、/*/no-cache/* と入力して、/api/no-cache/data や類似のパスに一致させます。

パス マッチングはドメイン名の後の最初の / から始まりますか?

はい。ルールエンジンでの非正規表現のパス一致の場合、一致するコンテンツはドメイン名の後の最初の / から始まるパス部分です。https://example.com/a.html の場合、実際に一致するパスは /a.html です。

CDN は、^https?://([^/]+)/path のようにプロトコルとドメイン名を含む完全な URL の正規表現一致をネイティブにサポートしていません。

ファイル名の一致を初めて設定したときに、レスポンスヘッダーが有効にならないのはなぜですか?

ルールエンジンでファイル名の一致を設定する際、「ファイル名 (ベースネーム)」と「ファイル拡張子」は 2 つの異なる一致タイプであることに注意してください:

  • ファイル名 (ベース名): ファイル拡張子を除いたファイル名の部分に一致します。例えば、 script (.js を除く) です。

  • ファイル拡張子: ファイル名のサフィックスに一致します。たとえば、.js や .css。

ファイル名の一致に script.js のようにファイル拡張子が含まれていると、正しく一致させることができません。ファイル拡張子を削除し、script のようにファイル名部分のみを入力すると、設定が有効になります。