キャッシュ モードの使用

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

始める前に

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

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

  • 必要に応じて、Cloud SDK を最新バージョンに更新します。

    gcloud components update
    

キャッシュ モードの設定

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

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

キャッシュ モード 動作
USE_ORIGIN_HEADERS 有効なキャッシュ ディレクティブと有効なキャッシュ ヘッダーを設定するには、送信元のレスポンスが必要です。これらのディレクティブのないレスポンスは、送信元から転送されます。

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

CACHE_ALL_STATIC no-storeprivate、または no-cache ディレクティブがない静的コンテンツを自動的にキャッシュに保存します。有効なキャッシュ ディレクティブを設定した送信元のレスポンスもキャッシュに保存されます。
FORCE_CACHE_ALL レスポンスを無条件にキャッシュに保存し、送信元で設定されたすべてのキャッシュ ディレクティブをオーバーライドします。このモードに構成された共有バックエンドを使用する場合、非公開のユーザー単位のコンテンツ(ダイナミック HTML や API レスポンスなど)はキャッシュに保存しないでください。

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

Console

  1. Google Cloud Console で、[負荷分散] ページに移動します。

    [負荷分散] ページに移動

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

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

  • FORCE_CACHE_ALL: Cache-Control レスポンス ヘッダー内の privateno-store、または no-cache のディレクティブを無視して、すべてのコンテンツをキャッシュに保存します。この結果、ユーザー単位の(ユーザーを特定可能な)限定公開コンテンツがキャッシュに保存される場合があります。これを有効にするのは、限定公開コンテンツまたは動的コンテンツを配信していないバックエンド(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 レスポンス ヘッダー内の privateno-store、または no-cache のディレクティブ)レスポンスは、キャッシュに保存されません。動的コンテンツをキャッシュに保存するには、コンテンツに有効なキャッシュ ヘッダーが含まれている必要があります。

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

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