このページでは、Cloud CDN で TTL オーバーライドを使用する方法について説明します。TTL オーバーライドを使用すると、Cloud CDN がコンテンツを再検証までにキャッシュに保存する期間を詳細に制御できます。
始める前に
キャッシュ モードについて確認します。
Cloud CDN が有効になっていることを確認します。手順については、Cloud CDN の使用をご覧ください。
必要に応じて、Cloud SDK を最新バージョンに更新します。
gcloud components update
デフォルトの TTL の設定
キャッシュ モードを、すべての静的コンテンツ(CACHE_ALL_STATIC
)、またはコンテンツ タイプに関係なくすべてのコンテンツ(FORCE_CACHE_ALL
)をキャッシュに保存するように設定している場合、コンテンツ キャッシュのデフォルトの有効期間(TTL)は 3,600 秒(1 時間)です。
デフォルトの TTL をオーバーライドして、Cloud CDN が送信元のコンテンツを再検証する頻度を下げることで、更新頻度の低いコンテンツのキャッシュ ヒット率を向上させることができます。デフォルトの TTL の最大値は、31,622,400 秒(1 年)です。アクセス頻度の低いオブジェクトは、定義された TTL の前にキャッシュから削除される可能性があります。
デフォルトの TTL を 0
に設定すると、デフォルトの TTL が適用される際に、送信元でレスポンスが再検証されます。
コンテンツ タイプ(FORCE_CACHE_ALL
)に関係なく、すべてのコンテンツがキャッシュに保存されるようにキャッシュ モードを設定すると、デフォルトの TTL は、すべてのレスポンスに設定されている TTL(元のヘッダーで TTL が設定されているレスポンスを含む)を上書きします。このモードでは、デフォルトの TTL はクライアントに表示されます。これは、Cloud CDN がクライアントに配信されるレスポンスの public
属性と max-age
属性を設定するためです。
CACHE_ALL_STATIC
モードの場合、有効な TTL(max-age
、s-max-age
、または Expires
ヘッダー)がないレスポンスに対して送信元から提供されたキャッシュ内のコンテンツにデフォルトの TTL が適用されます。CACHE_ALL_STATIC
モードの場合、デフォルトの TTL でクライアントに配信される Cache-Control
ヘッダーは変更されません。CACHE_ALL_STATIC
モードで Cache-Control
ヘッダーを変更するには、クライアント TTL を設定する必要があります。
送信元のヘッダー(USE_ORIGIN_HEADERS
)を使用するようにキャッシュ モードを設定すると、Cloud CDN は max-age
または s-max-age
の送信元のディレクティブ、または Expires
ヘッダーを代わりに使用するため、デフォルトの TTL 値は適用されず、設定できません。
Console
- Google Cloud Console で、[負荷分散] ページに移動します。
- 外部 HTTP(S) ロードバランサの名前をクリックします。
- [編集] をクリックします。
- [バックエンドの構成] でバックエンドを選択し、[編集] をクリックします。
- [Cloud CDN を有効にする] が選択されていることを確認します。
- キャッシュ モードが [静的コンテンツをキャッシュする(推奨)] または [すべてのコンテンツを強制的にキャッシュする] であることを確認します。キャッシュ モードが [Cache-Control ヘッダーに基づいて送信元の設定を使用する] の場合、TTL 値をオーバーライドすることはできません。
- [デフォルトの有効期間] で値を選択します。
- [保存] をクリックします。
gcloud
バックエンド サービスの場合は、--default-ttl
フラグを指定して gcloud compute backend-services
create
または gcloud compute backend-services
update
コマンドを使用します。
バックエンド バケットの場合は、--default-ttl
フラグを指定して gcloud compute backend-buckets
create
または gcloud compute backend-buckets
update
コマンドを使用します。
gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME --default-ttl=DEFAULT_TTL
gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME --default-ttl=DEFAULT_TTL
DEFAULT_TTL
を 31,622,400 秒(1 年間)以下の値に置き換えます。
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": { "defaultTtl": DEFAULT_TTL }
DEFAULT_TTL
を 31,622,400 秒(1 年間)以下の値に置き換えます。
TTL の上限の設定
最大 TTL は、送信元から配信されるキャッシュ コンテンツに関して Cloud CDN 内で許可される TTL の上限を指定します。
次のいずれかに該当する場合に、レスポンスの TTL に対して最大 TTL によって上限が設定されます。
- レスポンスは、
max-age
またはs-maxage
を最大 TTL 値よりも高い値に設定することを試みます。 - レスポンスには、今後
cdnPolicy.maxTtl
秒を超えるExpires
ヘッダーが含まれます。
最大 TTL の設定は、クライアントに送信される max-age
の値を変更しません。詳細については、最大クライアント TTL のオーバーライドをご覧ください。最大 TTL の設定は、Cloud CDN がコンテンツのキャッシュへの保存を試行する時間の長さにのみ影響します。
すべての静的コンテンツをキャッシュに保存するキャッシュ モード(CACHE_ALL_STATIC
)を設定した場合、コンテンツ キャッシュの最大 TTL はデフォルトで 86,400 秒(1 日)に設定されます。最大許容値は 31,622,400 秒(1 年)です。ただし、アクセス頻度の低いオブジェクトが、定義された TTL の前にキャッシュから削除される可能性があります。
FORCE_CACHE_ALL
では、TTL は常にデフォルトの TTL に設定されます。最大 TTL の設定はできません
TTL の最大値は、デフォルトの TTL の値以上にできます。
Console
- Google Cloud Console で、[負荷分散] ページに移動します。
- 外部 HTTP(S) ロードバランサの名前をクリックします。
- [編集] をクリックします。
- [バックエンドの構成] でバックエンドを選択し、[編集] をクリックします。
- [Cloud CDN を有効にする] が選択されていることを確認します。
- キャッシュ モードが [静的コンテンツをキャッシュする(推奨)] になっていることを確認します。
- [最大有効期間] で値を選択します。
- [保存] をクリックします。
gcloud
バックエンド サービスの場合は、--max-ttl
フラグを指定して gcloud compute backend-services
create
または gcloud compute backend-services
update
コマンドを使用します。
バックエンド バケットの場合は、--max-ttl
フラグを指定して gcloud compute backend-buckets
create
または gcloud compute backend-buckets
update
コマンドを使用します。
gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME --max-ttl=MAX_TTL
gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME --max-ttl=MAX_TTL
MAX_TTL
を 31,622,400 秒(1 年間)以下の値に置き換えます。
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": { "maxTtl": MAX_TTL }
MAX_TTL
を 31,622,400 秒(1 年間)以下の値に置き換えます。
クライアント TTL のオーバーライド
すべてのキャッシュ モードで、Cloud CDN は Cache-Control
ヘッダーをクライアントに渡します。
クライアント TTL を使用すると、ブラウザまたはクライアントに送信される内容に最大 TTL を設定できるため、クライアントは送信元の再検証を必要とすることなく、より高い頻度で Cloud CDN に対してコンテンツの再検証を実施できます。これにより、必要に応じて Cloud CDN 内でコンテンツを無効にできます。クライアントの TTL が期限切れになると、ブラウザは直ちにコンテンツが無効になったことを検出できます。
FORCE_CACHE_ALL
モードでは、Cloud CDN は通常、プロキシ キャッシュ用に内部で使用するのと同じ max-age
をクライアントに渡します。ただし、クライアント TTL が指定されており、その値がより小さい場合は、代わりにクライアントの TTL が max-age
ディレクティブ内でクライアントに渡されます。同様に、CACHE_ALL_STATIC
モードでは、クライアント TTL が送信元サーバーによって指定された任意の max-age
のクランプとして機能し、ブラウザまたはクライアントに送信される max-age
の値が構成済みのクライアント TTL を超えることはありません。max-age
が指定されていない場合は、より小さなデフォルトの TTL 値と、クライアントの TTL 値が、ブラウザまたはクライアントに送信される max-age
として使用されます。
クライアント TTL の値は最大 TTL 以下にしてください。
送信元のレスポンスに Expires
ヘッダーが含まれている場合、そのヘッダーは削除され、Cache-Control: max-age
ディレクティブで適切な TTL に置き換えられます。
Console
- Google Cloud Console で、[負荷分散] ページに移動します。
- 外部 HTTP(S) ロードバランサの名前をクリックします。
- [編集] をクリックします。
- [バックエンドの構成] でバックエンドを選択し、[編集] をクリックします。
- [Cloud CDN を有効にする] が選択されていることを確認します。
- キャッシュ モードが [静的コンテンツをキャッシュする(推奨)] または [すべてのコンテンツを強制的にキャッシュする] であることを確認します。キャッシュ モードが [Cache-Control ヘッダーに基づいて送信元の設定を使用する] の場合、TTL 値をオーバーライドすることはできません。
- [クライアント有効期間] で、86,400 秒までの値を選択します。
- [保存] をクリックします。
gcloud
バックエンド サービスの場合は、--client-ttl
フラグを指定して gcloud compute backend-services
create
または gcloud compute backend-services
update
コマンドを使用します。
バックエンド バケットの場合は、--client-ttl
フラグを指定して gcloud compute backend-buckets
create
または gcloud compute backend-buckets
update
コマンドを使用します。
gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME --client-ttl=CLIENT_TTL
gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME --client-ttl=CLIENT_TTL
CLIENT_TTL
を 86,400 秒(1 日)以下の値に置き換えます。
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": { "clientTtl": CLIENT_TTL }
CLIENT_TTL
を 86,400 秒(1 日)以下の値に置き換えます。