キャッシュ モードの使用

このページでは、Cloud CDN でキャッシュ モードを使用する手順について説明します。キャッシュ モードでは、Cloud CDN がコンテンツをキャッシュに保存する方法を構成できます。

始める前に

  • キャッシュ モードと静的コンテンツについて確認します。

  • Cloud CDN が有効になっていることを確認します。手順については、Cloud CDN の使用をご覧ください。

  • 必要に応じて、次のコマンドで Google Cloud CLI を最新バージョンに更新します。

    gcloud components update
    

キャッシュ モードの設定

Cloud CDN には 3 つのキャッシュ モードがあり、レスポンスがキャッシュに保存される方法、Cloud CDN が送信元から送信されたキャッシュ ディレクティブを遵守するかどうか、キャッシュ TTL の適用方法を定義します。

次の表に使用可能なキャッシュ モードを示します。

キャッシュ モード 動作
CACHE_ALL_STATIC 他の方法ではキャッシュに保存できない静的コンテンツと、成功したレスポンスを自動的にキャッシュに保存します。有効なキャッシュ ディレクティブを設定した送信元のレスポンスもキャッシュに保存されます。

これは、Google Cloud CLI または REST API を使用して作成された Cloud CDN 対応バックエンドのデフォルトの動作です。

USE_ORIGIN_HEADERS 有効なキャッシュ ディレクティブと有効なキャッシュ ヘッダーを設定するには、成功した送信元のレスポンスが必要です。これらのディレクティブのない成功レスポンスが送信元から転送されます。
FORCE_CACHE_ALL 成功したレスポンスを無条件にキャッシュに保存し、送信元で設定されたすべてのキャッシュ ディレクティブをオーバーライドします。このモードは、バックエンドが動的 HTML や API レスポンスなどのユーザー単位の非公開コンテンツを配信する場合には適していません。

有効なキャッシュ ディレクティブが存在しない場合でも、エラー レスポンスがキャッシュに保存される可能性があります

キャッシュ モードを FORCE_CACHE_ALL に設定する前に、次の動作について考慮してください。

  • 署名付き URL または署名付き Cookie の場合、FORCE_CACHE_ALL は、Google Cloud Console または gcloud --signed-url-cache-max-age オプションのキャッシュ エントリの最長存続期間の設定で指定された最長存続期間をオーバーライドします。

  • FORCE_CACHE_ALL は、以前にキャッシュに保存されたコンテンツの有効期間(TTL)を変更します。この変更により、以前は最新と見なされていた一部のエントリが古いと見なされる可能性があります(送信元のヘッダーの TTL が長くなったため)。また、以前は古いと見なされた一部のエントリが最新と見なされる可能性があります。

  • FORCE_CACHE_ALL は、キャッシュ ディレクティブ(Cache-ControlExpires)をオーバーライドしますが、他の送信元のレスポンス ヘッダーはオーバーライドしません。特に、Vary ヘッダーが引き続き考慮され、FORCE_CACHE_ALL が存在する場合でもキャッシュが抑制される可能性があります。詳細については、Vary ヘッダーをご覧ください。

Cloud CDN 対応バックエンドのキャッシュ モードを構成するには:

Console

  1. Google Cloud Console で、[ロード バランシング] ページに移動します。

    [ロード バランシング] ページに移動

  2. 外部 HTTP(S) ロードバランサの名前をクリックします。
  3. [編集] をクリックします。
  4. [バックエンドの構成] でバックエンドを選択し、[編集] をクリックします。
  5. [Cloud CDN を有効にする] が選択されていることを確認します。
  6. [キャッシュ モード] で、次のいずれかのオプションを選択します。
    • 静的コンテンツをキャッシュする(推奨): 静的コンテンツは、ユーザーごとに変更されないウェブアセットです。静的コンテンツはレスポンスの Content-Type に基づきます。詳細については、静的コンテンツをご覧ください。
    • Cache-Control ヘッダーに基づいて送信元の設定を使用する: レスポンス ヘッダーに有効なキャッシュ ディレクティブを指定してレスポンスをキャッシュに保存します。
    • すべてのコンテンツを強制的にキャッシュする: private または no-store ディレクティブを無視し、送信元から提供されたコンテンツをすべてキャッシュに保存します。
  7. [保存] をクリックします。

gcloud

バックエンド サービスの場合は、--cache-mode フラグを指定して gcloud compute backend-services create または gcloud compute backend-services update コマンドを使用します。

バックエンド バケットの場合は、--cache-mode フラグを指定して gcloud compute backend-buckets create または gcloud compute backend-buckets update コマンドを使用します。

gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME
    --cache-mode=CACHE_MODE
gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME
    --cache-mode=CACHE_MODE

CACHE_MODE を次のいずれかに置き換えます。

  • CACHE_ALL_STATIC(デフォルト): 静的コンテンツを自動的にキャッシュに保存します。キャッシュ不可としてマークされている(Cache-Control でレスポンス ヘッダー内の private または no-store ディレクティブ)レスポンスは、キャッシュに保存されません。動的コンテンツをキャッシュに保存するには、コンテンツに有効なキャッシュ ヘッダーが含まれている必要があります。

  • USE_ORIGIN_HEADERS: コンテンツをキャッシュに保存するには、送信元で有効なキャッシュ ヘッダーを設定する必要があります。これらのヘッダーがないレスポンスは Google のエッジでキャッシュに保存されません。リクエストごとに送信元を完全に通過する必要があるため、パフォーマンスに影響が及び、送信元サーバーの負荷が増加する可能性があります。

  • FORCE_CACHE_ALL: Cache-Control レスポンス ヘッダー内の private ディレクティブまたは no-store ディレクティブを無視して、すべてのコンテンツ(つまり、成功レスポンス)をキャッシュに保存します。この結果、ユーザー単位の(ユーザーを特定可能な)限定公開コンテンツがキャッシュに保存される場合があります。これを有効にするのは、限定公開コンテンツまたは動的コンテンツを配信していないバックエンド(Cloud Storage バケットなど)に限定する必要があります。限定公開または動的コンテンツを提供しているバックエンドでは有効にしないでください。

API

バックエンド バケットの場合は、Method: backendBuckets.insert または Method: backendBuckets.update API 呼び出しを使用します。

バックエンド サービスの場合は、Method: backendServices.insert または Method: backendServices.update API 呼び出しを使用します。

次のいずれかの API 呼び出しを使用します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BACKEND_BUCKET
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE

JSON リクエストの本文に次のスニペットを追加します。

"cdnPolicy": {
  "cacheMode": (CACHE_ALL_STATIC | USE_ORIGIN_HEADERS | FORCE_CACHE_ALL)

CACHE_MODE を次のいずれかに置き換えます。

  • CACHE_ALL_STATIC(デフォルト): 静的コンテンツを自動的にキャッシュに保存します。キャッシュ不可としてマークされている(Cache-Control でレスポンス ヘッダー内の private または no-store ディレクティブ)レスポンスは、キャッシュに保存されません。動的コンテンツをキャッシュに保存するには、コンテンツに有効なキャッシュ ヘッダーが含まれている必要があります。

  • USE_ORIGIN_HEADERS: コンテンツをキャッシュに保存するには、送信元で有効なキャッシュ ヘッダーを設定する必要があります。これらのヘッダーがないレスポンスは Google のエッジでキャッシュに保存されません。リクエストごとに送信元を完全に通過する必要があるため、パフォーマンスに影響が及び、送信元サーバーの負荷が増加する可能性があります。

  • FORCE_CACHE_ALL: Cache-Control レスポンス ヘッダー内の private ディレクティブまたは no-store ディレクティブを無視して、すべてのコンテンツ(つまり、成功レスポンス)をキャッシュに保存します。この結果、ユーザー単位の(ユーザーを特定可能な)限定公開コンテンツがキャッシュに保存される場合があります。これを有効にするのは、非公開コンテンツや動的コンテンツを提供していないバックエンド(Cloud Storage バケット)に限定する必要があります。