このページでは、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 など)を生成するリクエストから送信元を保護できます。
コンソール
- Google Cloud コンソールで、[ロード バランシング] ページに移動します。
- 外部アプリケーション ロードバランサの名前をクリックします。
- [編集] をクリックします。
- [バックエンドの構成] でバックエンドを選択し、[編集] をクリックします。
- [Cloud CDN を有効にする] が選択されていることを確認します。
- ウィンドウの下部にある [高度な構成] をクリックします。
- [ネガティブ キャッシュを有効にする] をクリックします。
- [ネガティブ キャッシュ ポリシーを追加] をクリックします。
- HTTP ステータス コードを入力します。
- キャッシュの有効期間(TTL)を選択します。
- [更新] をクリックします。
- [更新] をもう一度クリックします。
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 ステータス コードを指定できます。
300、301、302、307、308404、405、410、421、451501
ステータス コードごとにレスポンスをキャッシュに保存する秒数を指定できます。ステータス コードのネガティブ キャッシュを無効にするには、ネガティブ キャッシュ ポリシーからそのコードを除外します。
最大許容値は 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 リクエストに応じてキャッシュに保存します。詳しくは、キャッシュに保存可能なコンテンツをご覧ください。
各キャッシュ エントリはキャッシュキーで識別されます。
ネガティブ キャッシュを無効にする
コンソール
- Google Cloud コンソールで、[ロード バランシング] ページに移動します。
- 外部アプリケーション ロードバランサの名前をクリックします。
- [編集] をクリックします。
- [バックエンドの構成] でバックエンドを選択し、[編集] をクリックします。
- [Cloud CDN を有効にする] が選択されていることを確認します。
- ウィンドウの下部にある [高度な構成] をクリックします。
- [ネガティブ キャッシュを有効にする] の横にあるチェックボックスをオフにします。
- [更新] をクリックします。
- [更新] をもう一度クリックします。
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
}