ワイルドカードパージ
最終更新日 2019-07-15
ワイルドカードによるパージでは、ディレクトリブランチや URL パスの下にあるすべてのページのキャッシュを一括削除することができます。例えば、「/service」パスの下にあるすべてのページのキャッシュを空にしたい場合などに利用します。Fastly API や Fastly アプリを使用して、各 URL を1つずつパージするのはあまり効率的ではありません。
Fastly にはワイルドカードパージ機能そのものはありませんが、サロゲートキーを使用してわずかな設定変更を行うことで、同じ動作を実装することができます。サロゲートキーを使用すると、オブジェクトのグループにキーワード (キー) をタグ付けし、コントロールパネルまたはカスタム VCL 経由でキーを使って複数のコンテンツを一度にパージできます。
重要
パージは、設定変更後にキャッシュされた新しいオブジェクトにのみ適用されます。この設定の適用時にすでにキャッシュされているオブジェクトには適用されません。
ワイルドカードのパスに基づいてコンテンツをパージするには、以下の手順に従ってください。
コントロールパネルによる作成
コントロールパネル経由でワイルドカードパスに基づいてコンテンツをパージするには、以下の手順に従ってください。
デフォルトのワイルドカードヘッダーの作成
デフォルトのワイルドカードを設定することで、他のサロゲートキーを URL パスに追加できる柔軟性を確保できます。
- Fastly コントロールパネルにログインします。
- Home ページから、適切なサービスを選択します。検索ボックスで ID、名称、ドメインでの検索が行えます。
- Edit configuration ボタンをクリックし、アクティブなバージョンをクローンするオプションを選択します。ドメインページが表示されます。
- Content をクリックします。Content ページが表示されます。
Create header ボタンをクリックします。Create a header ページが表示されます。
以下の要領では、Create a header ページの各フィールドに入力します。
- Name フィールドに
Default Wildcard
と入力します。この名前は Fastly コントロールパネルに表示されます。 - Type メニューから Cache を選択し、Action メニューから Set を選択します。
- Destination フィールドに
http.Surrogate-Key
と入力します。 - Source フィールドに
""
と入力します。 - Ignore if set メニューから No を選択します。
- Priority フィールドに
10
を入力します。
- Name フィールドに
Create ボタンをクリックします。Content ページの Headers セクションに新しいヘッダーが表示されます。
パージする各ワイルドカードのパスにヘッダーを作成する
次に、パージできるようにする必要がある各ワイルドカードのパスにヘッダーを作成します。例えば、/*/foo
のワイルドカードのパスをパージしたいとします 。
Create header ボタンをクリックして新しいヘッダーを作成します。
以下の要領では、Create a header ページの各フィールドに入力します。
- Description フィールドに
/*/foo Wildcard
と入力します。この名前は Fastly コントロールパネルに表示されます。 - Type メニューから Cache を選択し、Action メニューから Append を選択します。
- Destination フィールドに
http.Surrogate-Key
と入力します。 - Source フィールドに
" */foo"
と入力します。Source フィールドのアスタリスクの前にスペースがありますが、これは複数のサロゲートキーを URL に付加する際に重要です。 - Ignore if set メニューから No を選択します。
- Priority フィールドに
20
を入力します。
- Description フィールドに
Create ボタンをクリックします。Content ページの Headers セクションに新しいヘッダーが表示されます。
Action が Append に設定され、デフォルトのワイルドカードサロゲートキーに追加されていることにご注目ください。Priority は20に設定されており、デフォルトのワイルドカードのヘッダーが最初に実行され、その後にワイルドカードパスが追加されます。
パージする各ワイルドカードパスに条件を設定する
最後に、パージできるようにする必要がある各ワイルドカードのパスに条件を設定します。
ワイルドカードのパスのヘッダー名の横にある Attach a condition をクリックします。新しいキャッシュ条件の作成 ウィンドウが表示されます。
以下の要領で、 Create a new cache condition ウィンドウの各フィールドに入力します。
- Name フィールドに
/*/foo Wildcard Condition
と入力します。 - Apply if フィールドに、
req.url ~ "^/[^/]*/foo$"
と入力します。
- Name フィールドに
Save and apply to ボタンをクリックすると、新しい条件が作成されます。
この場合の条件について見てみましょう。上記の Apply if フィールドでは、最初の "^"
と "$"
が Fastly に以下のパターンを探すように指示しています。
- リクエストの Host ヘッダーの後の最初のスラッシュから始まる。
- ディレクトリは1つのみ。
- URL の終わりの
/foo
のパスが後に続く。
例としては、/a/foo
、/bar/foo
、/c/foo
などがあります。また、最初の "^"
と ">"$"
を削除して条件をより一般的なものにし、URL パスの途中で発生したパターンも対象にすることができます。
その他の URL ワイルドカードの条件の例
Apply if フィールド | マッチしたパターン |
---|---|
req.url ~ "/[^/]*/foo" | /delta/wow/a/foo/neat/cool/img.gif |
req.url ~ "^/.*/foo$" | /a/b/c/d/e/f/foo |
ワイルドカードのパージ
ワイルドカードをパージする必要がある場合があります。コントロールパネルで以下の手順に従うことで、これを行うことができます。
- Fastly コントロールパネルにログインします。
Purge メニューから Purge Key を選択して下さい。
Purge key の設定画面が表示されます。
Keys フィールドに、パージしたいサロゲートキーを入力します。上記の例で言うと、New Header ウィンドウの Source フィールドで入力した引用符を除いて
*/foo
と入力します。Purge ボタンをクリックします。
カスタム VCL 経由でパージする
カスタム VCL でワイルドカードのパスに基づいてコンテンツをパージするには、以下の手順に従ってください。
VCL テンプレートに以下のコードを追加します。
1sub construct_skey {2 if (req.url.path ~ "^(((((/[^/]+)?/[^/]+)?/[^/]+)?/[^/]+)?/[^/]+)") {3 # This prevents us from doing this twice when shielding4 if (std.strstr(beresp.http.Surrogate-Key, re.group.1)) {5 return;6 }78 if (!re.group.2) {9 set beresp.http.Surrogate-Key = if(beresp.http.Surrogate-Key, beresp.http.Surrogate-Key " ", "")10 + re.group.1;11 return;12 }1314 if (!re.group.3) {15 set beresp.http.Surrogate-Key = if(beresp.http.Surrogate-Key, beresp.http.Surrogate-Key " ", "")16 + re.group.1 + " " + re.group.2;17 return;18 }1920 if (!re.group.4) {21 set beresp.http.Surrogate-Key = if(beresp.http.Surrogate-Key, beresp.http.Surrogate-Key " ", "")22 + re.group.1 + " " + re.group.2 + " " + re.group.3;23 return;24 }2526 if (!re.group.5) {27 set beresp.http.Surrogate-Key = if(beresp.http.Surrogate-Key, beresp.http.Surrogate-Key " ", "")28 + re.group.1 + " " + re.group.2 + " " + re.group.3 + " " + re.group.4;29 return;30 }31 set beresp.http.Surrogate-Key = if(beresp.http.Surrogate-Key, beresp.http.Surrogate-Key " ", "")32 + re.group.1 + " " + re.group.2 + " " + re.group.3 + " " + re.group.4 + " " + re.group.5;33 }34}vcl_fetch
のサブルーチンを呼び出します。1sub vcl_fetch {2call construct_skey;3}成功したかどうかを確認するには、まだキャッシュされていないオブジェクトを
Fastly-Debug:1
ヘッダーを使用して curl コマンドでリクエストし、サロゲートキーを表示します。例:1$ curl -svo /dev/null http://www.example.com/test/test2/file3.txt -H Fastly-Debug:12* Trying 192.0.2.0...3* Connected to www.example.com (192.0.2.0) port 80 (#0)4> Host: www.example.com5> User-Agent: curl/7.43.06> Accept: */*7> Fastly-Debug:18>9< HTTP/1.1 200 OK10< Server: Apache11< Content-Type: text/plain12< Surrogate-Key: /test /test/test2 /test/test2/file3.txt13< Via: 1.1 varnish14< X-Backend-IP: 203.0.113.015< Cache-Control: max-age=31536000, stale-while-revalidate=31536000, stale-if-error=3153600016< Content-Length: 1917< Accept-Ranges: bytes18< Date: Fri, 29 Jan 2016 21:30:08 GMT19< Via: 1.1 varnish20< Age: 103521< Connection: keep-alive22< Fastly-Debug-Path: (D cache-sjc3123-SJC 1454103008) (F cache-sjc3134-SJC 1454101973) (D cache-den6026-DEN 1454101973) (F cache-den6027-DEN 1454101973)23< Fastly-Debug-TTL: (H cache-sjc3123-SJC - - 1035) (M cache-den6026-DEN - - 0)24< Fastly-Debug-Digest: b43bd38cf940e1669c2927c8662660e5170758053dda42e772ce3fc34ee57fc125< X-Served-By: cache-den6026-DEN, cache-sjc3123-SJC26< X-Cache: MISS, HIT27< X-Cache-Hits: 0, 128< Vary: Accept-Encoding29<30{ [19 bytes data]31* Connection #0 to host www.example.com left intact
上記の例では < Surrogate-Key: /test /test/test2 /test/test2/file3.txt
のヘッダーから、3つのサロゲートキーが追加されているのが分かります。
API 経由でパージする
また、API 経由でキーベースのパージを行い、HTTP リクエストを使用してワイルドカードのパージを行うこともできます。
POST /service/<Fastly Service ID>/purge/*/fooFastly-Key: FASTLY_API_TOKEN
これにより、ヘッダールールの設定に従って "*/foo"
のサロゲートキーに関連付けられているコンテンツがすべて消去されます。API でサービスをパージするためのシンタックスは、API に関するドキュメントのパージセクションに記載されています。