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

設定をはじめる前に

オリジンがユーザーのためにコンテンツを選択したり、適切なセキュリティドメインにリクエストを送信するために特別な値 (リクエストヘッダーなど) を使用する場合は、キャッシュキーや 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.http.host ではなく単に req.url に変更した場合、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. All services ページから、該当するサービスを選択します。検索ボックスを使用して 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. Set MyCookie Header from Cookieヘッダーの横にある Attach a condition をクリックします。Add a condition ウィンドウが表示されます。
  2. Create a new request condition ボタンをクリックします。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