ワイルドカードパージ

ワイルドカードによるパージでは、ディレクトリブランチや URL パスの下にあるすべてのページのキャッシュを一括削除することができます。例えば、「/service」パスの下にあるすべてのページのキャッシュを空にしたい場合などに利用します。Fastly API や Fastly アプリを使用して、各 URL を1つずつパージするのはあまり効率的ではありません。

Fastly にはワイルドカードパージ機能そのものはありませんが、サロゲートキーを使用してわずかな設定変更を行うことで、同じ動作を実装することができます。サロゲートキーを使用すると、オブジェクトのグループにキーワード (キー) をタグ付けし、コントロールパネルまたはカスタム VCL 経由でキーを使って複数のコンテンツを一度にパージできます。

重要

パージは、設定変更後にキャッシュされた新しいオブジェクトにのみ適用されます。この設定の適用時にすでにキャッシュされているオブジェクトには適用されません。

ワイルドカードのパスに基づいてコンテンツをパージするには、以下の手順に従ってください。

コントロールパネルによる作成

コントロールパネル経由でワイルドカードパスに基づいてコンテンツをパージするには、以下の手順に従ってください。

デフォルトのワイルドカードヘッダーの作成

デフォルトのワイルドカードを設定することで、他のサロゲートキーを URL パスに追加できる柔軟性を確保できます。

  1. Fastly コントロールパネルにログインします。
  2. Home ページから、適切なサービスを選択します。検索ボックスで ID、名称、ドメインでの検索が行えます。
  3. Edit configuration ボタンをクリックし、アクティブなバージョンをクローンするオプションを選択します。ドメインページが表示されます。
  4. Content をクリックします。Content ページが表示されます。
  5. Create header ボタンをクリックします。Create a header ページが表示されます。

    デフォルトのワイルドカードヘッダー作成の設定

  6. 以下の要領では、Create a header ページの各フィールドに入力します。

    • Name フィールドに Default Wildcard と入力します。この名前は Fastly コントロールパネルに表示されます。
    • Type メニューから Cache を選択し、Action メニューから Set を選択します。
    • Destination フィールドに http.Surrogate-Key と入力します。
    • Source フィールドに "" と入力します。
    • Ignore if set メニューから No を選択します。
    • Priority フィールドに 10 を入力します。
  7. Create ボタンをクリックします。Content ページの Headers セクションに新しいヘッダーが表示されます。

パージする各ワイルドカードのパスにヘッダーを作成する

次に、パージできるようにする必要がある各ワイルドカードのパスにヘッダーを作成します。例えば、/*/foo のワイルドカードのパスをパージしたいとします 。

  1. Create header ボタンをクリックして新しいヘッダーを作成します。

    パージされるパスのワイルドカードヘッダー

  2. 以下の要領では、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 を入力します。
  3. Create ボタンをクリックします。Content ページの Headers セクションに新しいヘッダーが表示されます。

Action が Append に設定され、デフォルトのワイルドカードサロゲートキーに追加されていることにご注目ください。Priority は20に設定されており、デフォルトのワイルドカードのヘッダーが最初に実行され、その後にワイルドカードパスが追加されます。

パージする各ワイルドカードパスに条件を設定する

最後に、パージできるようにする必要がある各ワイルドカードのパスに条件を設定します。

  1. ワイルドカードのパスのヘッダー名の横にある Attach a condition をクリックします。新しいキャッシュ条件の作成 ウィンドウが表示されます。

    New Condition ウィンドウ

  2. 以下の要領で、 Create a new cache condition ウィンドウの各フィールドに入力します。

    • Name フィールドに /*/foo Wildcard Condition と入力します。
    • Apply if フィールドに、req.url ~ "^/[^/]*/foo$" と入力します。
  3. 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

ワイルドカードのパージ

ワイルドカードをパージする必要がある場合があります。コントロールパネルで以下の手順に従うことで、これを行うことができます。

  1. Fastly コントロールパネルにログインします。
  2. Purge メニューから Purge Key を選択して下さい。

    パージメニュー

    Purge key の設定画面が表示されます。

  3. Keys フィールドに、パージしたいサロゲートキーを入力します。上記の例で言うと、New Header ウィンドウの Source フィールドで入力した引用符を除いて */foo と入力します。

    パージキーのウィンドウ

  4. Purge ボタンをクリックします。

カスタム VCL 経由でパージする

カスタム VCL でワイルドカードのパスに基づいてコンテンツをパージするには、以下の手順に従ってください。

  1. VCL テンプレートに以下のコードを追加します。

    1sub construct_skey {
    2 if (req.url.path ~ "^(((((/[^/]+)?/[^/]+)?/[^/]+)?/[^/]+)?/[^/]+)") {
    3 # This prevents us from doing this twice when shielding
    4 if (std.strstr(beresp.http.Surrogate-Key, re.group.1)) {
    5 return;
    6 }
    7
    8 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 }
    13
    14 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 }
    19
    20 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 }
    25
    26 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}
  2. vcl_fetch のサブルーチンを呼び出します。

    1sub vcl_fetch {
    2call construct_skey;
    3}
  3. 成功したかどうかを確認するには、まだキャッシュされていないオブジェクトを Fastly-Debug:1 ヘッダーを使用して curl コマンドでリクエストし、サロゲートキーを表示します。例:

    1$ curl -svo /dev/null http://www.example.com/test/test2/file3.txt -H Fastly-Debug:1
    2* Trying 192.0.2.0...
    3* Connected to www.example.com (192.0.2.0) port 80 (#0)
    4> Host: www.example.com
    5> User-Agent: curl/7.43.0
    6> Accept: */*
    7> Fastly-Debug:1
    8>
    9< HTTP/1.1 200 OK
    10< Server: Apache
    11< Content-Type: text/plain
    12< Surrogate-Key: /test /test/test2 /test/test2/file3.txt
    13< Via: 1.1 varnish
    14< X-Backend-IP: 203.0.113.0
    15< Cache-Control: max-age=31536000, stale-while-revalidate=31536000, stale-if-error=31536000
    16< Content-Length: 19
    17< Accept-Ranges: bytes
    18< Date: Fri, 29 Jan 2016 21:30:08 GMT
    19< Via: 1.1 varnish
    20< Age: 1035
    21< Connection: keep-alive
    22< 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: b43bd38cf940e1669c2927c8662660e5170758053dda42e772ce3fc34ee57fc1
    25< X-Served-By: cache-den6026-DEN, cache-sjc3123-SJC
    26< X-Cache: MISS, HIT
    27< X-Cache-Hits: 0, 1
    28< Vary: Accept-Encoding
    29<
    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/*/foo
Fastly-Key: FASTLY_API_TOKEN

これにより、ヘッダールールの設定に従って "*/foo" のサロゲートキーに関連付けられているコンテンツがすべて消去されます。API でサービスをパージするためのシンタックスは、API に関するドキュメントのパージセクションに記載されています。


翻訳についての注意事項
このガイドは役に立ちましたか?

このフォームを使用して機密性の高い情報を送信しないでください。サポートが必要な場合はお問い合わせください : support@fastly.com