キャッシュキーを操作する

設定前の注意点

オリジンがユーザーのためにコンテンツを選択したり、適切なセキュリティドメインにリクエストを送信するために特別な値 (リクエストヘッダーなど) を使用する場合は、キャッシュキーや Vary ヘッダーにそれらの値を含めることをご検討ください。これにより、セキュリティドメイン全体でコンテンツを誤ってキャッシュすることを防ぎ、悪意のある攻撃者によるキャッシュポイズニングを防ぐことができます。

キャッシュキーの再定義

キャッシュキーの明示的な設定

コントロールパネルについての Setting ページでリクエスト設定を追加し、カンマで区切られたキャッシュキーのリストを含めることで、キャッシュキーを明示的に設定することができます (条件の追加も含みます)。リストにあるキャッシュキーの値を組み合わせて単一のハッシュを作成し、ユニークなハッシュはそれぞれユニークなオブジェクトとみなされます。

例えば、クエリ文字列をキャッシュキーに含めたくないにもかかわらず、req.url を変更せずにクエリ文字列がログに表示されるようにしたい場合、ハッシュキーに以下のテキストを使用することができます。

1
req.url.path, req.http.host

コントロールパネルでは、このテキストは Cache keys フィールドに表示されます。

the advanced options of a new request setting page showing the contents of the cache keys field

一般的なルールとして、常に req.url をキャッシュキーの一つとして、またはキャッシュキーの一部として使用する必要があります。

キャッシュキーを追加する際のパージ調整

パージは個々のハッシュに対して行われるため、キャッシュキーを追加すると URL のパージが複雑になりますが、簡略化することも可能です。

例えば、キャッシュキーをデフォルトの req.url ではなく単に req.url, req.http.host に変更した場合、http://foo.example.com/file.html をパージすると http://bar.example.com/file.html もパージされます。キャッシュの中ではこれらは実際に同じオブジェクトであるためです。

一方、req.url, req.http.host, req.http.Fastly-SSL のキャッシュキーを変更する場合は 、http://example.com/https://example.com/ を個別にパージする必要があります。

後者の場合、キャッシュキーを変更する代わりに Vary ヘッダーを使用すると、2つの URL に異なるコンテンツが存在していても、1回のパージでそれらを削除することができます。この場合、新しいキャッシュヘッダーを追加し、http.Vary を Destination に使用して、Source に以下を使用します。

1
if(beresp.http.Vary, beresp.http.Vary ",", "") "Fastly-SSL"

Cookie をキャッシュキーとして使用したり、リクエスト条件をコントロールして特定の値に設定された Cookie の存在を確認したりすることができます。どちらも簡単にできます。以下にその手順をご紹介します。

Cookie をキャッシュキーとして使用するのは一見複雑に見えますが、実はとても簡単です。例えば、Cookie が「MyCookie」という名前で、mycookie= であるとします。

新しいヘッダーの作成

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

    the create header page

  6. 以下の要領では、Create a header ページの各フィールドに入力します。
    • Name フィールドに Set MyCookie Header Default と入力します。
    • Type メニューから Request を選択し、Action メニューから Set を選択します。
    • Destination フィールドに http.X-MyCookie と入力します。
    • Source フィールドに "0" (引用符付き) を入力します。
    • Ignore if set メニューはデフォルトのまま No にしておきます。
    • Priority フィールドには、ヘッダールールの実行順を表す数字を入力します。デフォルトでは、新しいヘッダーに対して 10 に設定されています。
  7. Create ボタンをクリックします。新しいヘッダーが Content ページの Headers セクションに表示されます。
  8. Create header ボタンを再度クリックし、以下の要領で各フィールドに入力して2つ目の新しいヘッダーを作成します。
    • Name フィールドに Set MyCookie Header from Cookie と入力します。
    • Type メニューから Request を選択し、Action メニューから Set を選択します。
    • Destination フィールドに http.X-MyCookie と入力します。
    • Source フィールドに req.http.cookie:mycookie と入力します。
    • Ignore if set メニューはデフォルトのまま No にしておきます。
    • Priority フィールドには、先ほど作成した前のヘッダーの実行順よりも大きな数字を入力します。例えば、デフォルトで Priority が 10 に設定されていた場合、20 を入力します。
  9. Create ボタンをクリックします。2つ目のヘッダーが、Content ページの Headers セクションに表示されます。

    example set myCookie headers in the headers area

新しいヘッダーに条件を付ける

  1. Attach a condition ヘッダーの横にある Set MyCookie Header from Cookie をクリックします。Add a condition ウィンドウが表示されます。
  2. Create a new request condition ボタンをクリックします。新しいリクエスト条件の作成 ウィンドウが表示されます。

    the create a new request condition window

  3. 以下の要領で Create a new request condition ページの各フィールドに入力します。
    • Name フィールドに Has MyCookie cookie と入力します。
    • Apply if フィールドに、req.http.cookie:mycookie と入力します。
  4. Save and apply to ボタンをクリックします。Headers セクションに、ヘッダーの使用に必要な条件が表示されます。

    example mycookie headers with conditions

  5. Settings をクリックします。Settings ページが表示されます。
  6. Create request setting ボタンをクリックします。Create a request setting ページが表示されます。
  7. Name フィールドに Set Hash from Cookie と入力します。
  8. Advanced options をクリックします。Advanced options が表示されます。
  9. Cache keys フィールドに req.url, req.http.host, req.http.X-MyCookie と入力します。
  10. Create ボタンをクリックします。新しいリクエストが Request settings セクションに表示されます。
  11. 新しく設定したリクエストの横にある Attach a condition をクリックします。Add a condition ウィンドウが表示されます。

    add a condition to the set hash from cookie request

  12. Select a condition メニューから、Has MyCookie cookie を選択します。 Request settings セクションに、リクエストの使用に必要な条件が表示されます。

example has mycookie cookie request with condition

  1. Activate ボタンをクリックして設定変更をデプロイします。

単に特定の値 (1など) に設定された Cookie の存在を確認する場合は、以下のような別の方法があります。

  1. Cache key フィールドを req.url, req.http.host, "Has mycookie" に設定したリクエスト設定を追加します。
  2. Apply if フィールドに req.http.cookie:mycookie が含まれている条件をそのリクエスト設定に追加します。
Back to Top