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

設定前の注意点

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

キャッシュキーの再定義

警告

デフォルトでは、Fastly はリクエストの URL とホスト (さらに、パージ用の特殊な Fastly 内部変数) を使用して、一意の HTTP オブジェクトを作成します。Fastly では、キャッシュキーを明示的に設定してより正確に定義することができますが、デフォルトの動作を変更すると以下のようなリスクがあります。

  1. キャッシュキーに付加する情報が多すぎると、ヒット率が著しく低下します。
  2. キャッシュキーを明示的に設定する際にミスをして、すべてのリクエストが同じオブジェクトを取得してしまうことがあります。
  3. ハッシュに何かを追加した場合、その特定のデータをキャッシュからパージするためには、追加した URL と値の組み合わせごとにパージリクエストを送信する必要があります。

これらの危険性を回避するためには、以下の指示に従うのではなく、Vary ヘッダーを使用することを検討してください。

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

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

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

req.url.path, req.http.host

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

cache keys フィールドのコンテンツを表示した、新しいリクエストの setting ページの advanced options

一般的なルールとして、常に 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 に以下を使用します。

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 をクリックします。
  5. Create header をクリックします。

    create header ページ

  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 セクションに表示されます。

    headers エリアの myCookie ヘッダーの設定例

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

  1. Set MyCookie Header from Cookie ヘッダーの横にある Attach a condition をクリックします。

  2. Create a new request condition をクリックします。

    新しいリクエスト条件の作成ウィンドウ

  3. 以下の要領で Create a new request condition ページの各フィールドに入力します。

    • Name フィールドに Has MyCookie cookie と入力します。
    • Apply if フィールドに、req.http.cookie:mycookie と入力します。
  4. Save and apply to をクリックします。Headers セクションに、ヘッダーの使用に必要な条件が表示されます。

    条件が追加された mycookie ヘッダーの例

  5. Settings をクリックします。
  6. Create request setting をクリックします。

  7. Name フィールドに Set Hash from Cookie と入力します。

  8. ページの下部にある Advanced options をクリックします。

  9. Cache keys フィールドに req.url, req.http.host, req.http.X-MyCookie と入力します。

  10. Create をクリックします。

  11. 新規リクエストの横にある Attach a condition をクリックします。

    cookie リクエストから設定ハッシュに条件を追加

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

    mycookie cookie リクエストに条件が追加された例

  13. Activate をクリックして設定への変更をデプロイします。

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

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

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

このフォームを使用して機密性の高い情報を送信しないでください。サポートが必要な場合は、サポートチームまでご連絡ください。このフォームは reCAPTCHA によって保護されており、Google のプライバシーポリシー利用規約が適用されます。