ネガティブ キャッシュの使用

このページでは、Cloud CDN でネガティブ キャッシュを使用する手順について説明します。ネガティブ キャッシュを使用すると、ステータス コードごとに異なる TTL を設定できます。

これにより、一般的なエラーやリダイレクトに詳細なキャッシュを適用できるようになります。これにより、送信元の負荷を軽減し、レスポンスのレイテンシを短縮することで、エンドユーザーのエクスペリエンスを向上させることができます。

始める前に

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

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

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

    gcloud components update
    

ステータス コードとデフォルトの TTL

ネガティブ キャッシュは、次の表に示す特定のステータス コードに適用されます。

Cloud CDN は、これらのステータス コードに次のデフォルト TTL を適用します。

ステータス コード 意味 TTL
HTTP 300 複数の選択肢があります 10 分
HTTP 301 と 308 恒久的なリダイレクト 10 分
HTTP 302 と 307 一時的なリダイレクト デフォルトではキャッシュに保存されません
HTTP 404 見つかりませんでした 120 秒
HTTP 405 メソッドが見つかりません 60 秒
HTTP 410 存在しません 120 秒
HTTP 451 法律上の理由で利用できません 120 秒
HTTP 501 実装されていません 60 秒

これらのデフォルト値をオーバーライドするには、ネガティブ キャッシュを使用して、指定された HTTP ステータス コードのキャッシュ TTL を設定します。

ネガティブ キャッシュの設定

ネガティブ キャッシュを使用すると、失敗と成功をキャッシュに保存するようにサービスを構成できます。これにより Cloud CDN は、成功のレスポンスを生成するリクエストから送信元を保護する場合と同様に、エラー(404 Not Found など)を生成するリクエストから送信元を保護できます。

Console

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

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

  2. 外部アプリケーション ロードバランサの名前をクリックします。
  3. [編集] をクリックします。
  4. [バックエンドの構成] でバックエンドを選択し、[編集] をクリックします。
  5. [Cloud CDN を有効にする] が選択されていることを確認します。
  6. ウィンドウの下部にある [高度な構成] をクリックします。
  7. [ネガティブ キャッシュを有効にする] をクリックします。
  8. [ネガティブ キャッシュ ポリシーを追加] をクリックします。
    1. HTTP ステータス コードを入力します。
    2. キャッシュの有効期間(TTL)を選択します。
  9. [更新] をクリックします。
  10. [更新] をもう一度クリックします。

gcloud

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

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

gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME
    --negative-caching
gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME
    --negative-caching

2 つの特定のエラー レスポンスのネガティブ キャッシュのみを有効にするには、ステータス コード 404 のレスポンスを 60 秒間キャッシュに保存し、ステータス コード 405 のレスポンスを 120 秒間キャッシュに保存します。

gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --negative-caching \
    --cache-mode=CACHE_ALL_STATIC \
    --default-ttl=86400 \
    --negative-caching-policy='404=60,405=120'

api

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

バックエンド サービスには、Method: backendServices.insert API 呼び出しまたは 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": {
  "negativeCaching": ON,
  "negativeCachingPolicy": [
    {
      "code": STATUS_CODE,
      "ttl": TTL_SECONDS
    }
  ]
}

negativeCachingPolicy を構成するには、ネガティブ キャッシュを有効にする必要があります。ポリシーを省略し、negativeCaching を有効にしている場合、Cloud CDN はステータス コードとデフォルトの TTL にあるデフォルト値を使用します。

ネガティブ キャッシュ ポリシーを指定する場合は、キャッシュに保存するすべてのレスポンス コードにキャッシュ TTL を指定してください。ポリシーが指定されている場合、Cloud CDN はデフォルトのネガティブ キャッシュを適用しません。

STATUS_CODE には、次の HTTP ステータス コードを指定できます。

  • 300301302307308
  • 404405410421451
  • 501

ステータス コードごとにレスポンスをキャッシュに保存する秒数を指定できます。ステータス コードのネガティブ キャッシュを無効にするには、ネガティブ キャッシュ ポリシーからそのコードを除外します。

最大許容値は 1,800 秒(30 分)です。ただし、アクセス頻度の少ないオブジェクトは、定義された TTL の前にキャッシュから削除されることがあります。

キャッシュ モードを CACHE_ALL_STATIC または USE_ORIGIN_HEADERS に設定すると、指定したレスポンス コードを持ち、Cache-Control または Expires ヘッダーのないレスポンスにネガティブ キャッシュが適用されます。

キャッシュ モードが FORCE_CACHE_ALL に設定されている場合、ネガティブ キャッシュは送信元によって設定されたキャッシュ ヘッダーをオーバーライドします。Cloud CDN は TTL で指定された時間だけ応答をキャッシュするか、TTL が設定されていない場合はまったくキャッシュしません。

また、キャッシュ モードを FORCE_CACHE_ALL に設定すると、Cloud CDN は Cache-Control ヘッダーでクライアントに送信された max-age も変更します。特に、特定のエラーに TTL 設定が構成されている場合、Cloud CDN はその TTL 設定と client_ttl 構成設定の小さい方を取得し、その値を含む Cache-Control: public,max-age=N ヘッダーを送信します。特定のエラーに TTL 設定が構成されていない場合、Cloud CDN は送信元から送信された Cache-Control ヘッダーをすべて削除します。Cloud CDN は、送信元から送信された Expires ヘッダーも常に削除します。

送信元で初期からネガティブ キャッシュが有効になっていて、その後(手動または特定のレスポンス コードのキャッシュ保存を無効化したことにより)無効化された場合、キャッシュに保存されたエラー レスポンスは、Cache-Control または Expires ヘッダーのみに基づいて有効と見なされます。したがって、ネガティブ キャッシュを無効にすると、ヘッダーにキャッシュ保存期間ディレクティブがないレスポンスはキャッシュから提供されなくなります。

Cloud CDN は、GET リクエストに応じてキャッシュに保存します。詳しくは、キャッシュに保存可能なコンテンツをご覧ください。

各キャッシュ エントリはキャッシュキーで識別されます。

ネガティブ キャッシュを無効にする

Console

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

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

  2. 外部アプリケーション ロードバランサの名前をクリックします。
  3. [編集] をクリックします。
  4. [バックエンドの構成] でバックエンドを選択し、[編集] をクリックします。
  5. [Cloud CDN を有効にする] が選択されていることを確認します。
  6. ウィンドウの下部にある [高度な構成] をクリックします。
  7. [ネガティブ キャッシュを有効にする] の横にあるチェックボックスをオフにします。
  8. [更新] をクリックします。
  9. [更新] をもう一度クリックします。

gcloud

バックエンド バケットには、--no-negative-caching フラグを指定して gcloud compute backend-buckets create コマンドまたは gcloud compute backend-buckets update コマンドを使用します。

バックエンド サービスには、--no-negative-caching フラグを指定して gcloud compute backend-services create コマンドまたは gcloud compute backend-services update コマンドを使用します。

gcloud compute backend-services (create | update) (BACKEND_SERVICE_NAME | BACKEND_BUCKET_NAME)
    --no-negative-caching

api

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

バックエンド サービスには、Method: backendServices.insert API 呼び出しまたは 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": {
  "negativeCaching": OFF
}