このページでは、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-Control
とExpires
)をオーバーライドしますが、他の送信元のレスポンス ヘッダーはオーバーライドしません。特に、Vary
ヘッダーが引き続き考慮され、FORCE_CACHE_ALL
が存在する場合でもキャッシュが抑制される可能性があります。詳細については、Vary ヘッダーをご覧ください。
Cloud CDN 対応バックエンドのキャッシュ モードを構成するには:
Console
- Google Cloud Console で、[ロード バランシング] ページに移動します。
- 外部アプリケーション ロードバランサの名前をクリックします。
- [編集] をクリックします。
- [バックエンドの構成] でバックエンドを選択し、[編集] をクリックします。
- [Cloud CDN を有効にする] が選択されていることを確認します。
- [キャッシュ モード] で、次のいずれかのオプションを選択します。
- 静的コンテンツをキャッシュする(推奨): 静的コンテンツは、ユーザーごとに変更されないウェブアセットです。静的コンテンツはレスポンスの
Content-Type
に基づきます。詳細については、静的コンテンツをご覧ください。 - Cache-Control ヘッダーに基づいて送信元の設定を使用する: レスポンス ヘッダーに有効なキャッシュ ディレクティブを指定してレスポンスをキャッシュに保存します。
- すべてのコンテンツを強制的にキャッシュする:
private
またはno-store
ディレクティブを無視し、送信元から提供されたコンテンツをすべてキャッシュに保存します。
- 静的コンテンツをキャッシュする(推奨): 静的コンテンツは、ユーザーごとに変更されないウェブアセットです。静的コンテンツはレスポンスの
- [保存] をクリックします。
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 バケット)に限定する必要があります。