キャッシュ有効期限ルールを設定することで、POP (Points of Presence) 上にリソースがキャッシュされる期間を正確に制御し、コンテンツの更新、アクセスパフォーマンス、オリジンフェッチのコストのバランスを取ることができます。本ドキュメントでは、キャッシュルールの仕組み、設定と確認方法、トラブルシューティング、およびベストプラクティスについて説明します。
仕組み
リクエストが POP に到達すると、システムは以下の決定フローに従って、キャッシュコピーを提供するか、オリジンサーバーから最新のコンテンツをフェッチするかを判断します。
リソースをキャッシュしない:オリジンサーバーが
pragma:no-cache、cache-control:no-cache(またはno-store、max-age=0) を返した場合、POP はオリジンのポリシーに従い、リソースをキャッシュしません。コンソールのキャッシュルールに従う:コンソールで特定のディレクトリやファイル拡張子に対してルールを設定しており、かつオリジンサーバーが上記の「キャッシュしない」ヘッダーを送信しない場合、コンソールのキャッシュルールが優先されます。
複数のコンソールキャッシュルールが一致する場合の優先度ロジック:
シナリオ
ロジック
例
異なる重み
重みの値 (1~99) が大きいルールが優先されます。
ルール A (
/image/ディレクトリ、重み 50) とルール B (.jpg拡張子、重み 90) の両方がimage/a.jpgに一致する場合、ルール B が適用されます。重みが同じ場合
先に作成されたルールが優先されます。
ディレクトリールール (
/static/) とファイル拡張子ルール (.js) を同じ重み 60 で設定し、ディレクトリールールが拡張子ルールより先に作成された場合、/static/app.jsはディレクトリールールに一致します。リクエストがキャッシュルールに一致すると、他のルールはチェックされません。
デフォルトでは、オリジンサーバーが
Pragma: no-cacheまたはCache-Control: no-cache/no-store/max-age=0を返した場合、POP はリソースをキャッシュしません。キャッシュを強制するには、コンソールでキャッシュルールを設定する際に [オリジンの No-Cache ヘッダーを無視] を選択します。
CDN がオリジンサーバーのキャッシュポリシーに従う:リクエストがコンソールのどのルールにも一致しない場合、または一致したルールで [オリジン TTL に従う] が有効になっている場合、CDN はオリジンサーバーからの HTTP レスポンスヘッダーに従います。これらのヘッダーの優先度は、高い順に
cache-control>expires>last-modified>ETagとなります。レスポンスヘッダー
処理方法
例
Cache-Control
キャッシュ期間は
s-maxageディレクティブが優先され、次にmax-ageが続きます。s-maxage=86400, max-age=3600Expires
有効期限の日時を指定します。これは
Cache-Controlヘッダーが存在しない場合にのみ使用されます。Expires: Wed, 21 Oct 2025 07:28:00 GMTLast-Modified
Last-Modifiedは、リソースが最後に変更された日時を示すタイムスタンプです。
キャッシュ期間は次のように計算されます:
(現在時刻 -Last-Modified) * 0.1。結果の期間は 10 秒から 3,600 秒の範囲に制限されます。Last-Modified: Wed, 21 Oct 2023 07:28:00 GMTETag
ETagは、特定バージョンのリソースに対してサーバーが生成する一意の識別子で、通常はハッシュ値やバージョン番号です。
デフォルトでは、ETagを持つリソースは 10 秒間キャッシュされます。ETag: "abc123"キャッシュしないポリシー:リクエストがコンソールのどのキャッシュルールにも一致せず、オリジンサーバーが
Cache-Controlなどのキャッシュ関連のレスポンスヘッダーを返さない場合、POP はリソースをキャッシュしません。
キャッシュポリシーは、オリジンサーバーからのステータスコードが 200、203、206、300、301、308、または 410 のレスポンスにのみ適用されます。他のステータスコード (404 など) のレスポンスをキャッシュするには、[キャッシュ設定] ページの [ステータスコード TTL] で設定します。
操作手順
コンソールでの設定 (推奨)
CDN コンソールで、[ドメイン名] ページに移動し、対象ドメインの行にある 管理 をクリックします。
ページで、[追加] をクリックして新しいキャッシュルールを設定します。
キャッシュ有効期限の追加 | パラメーター | 説明 |
| タイプ | ディレクトリ または ファイル拡張子 でルールの範囲を指定します。 |
アドレス | 選択したタイプに基づいて内容を入力します: | |
有効期限 | リソースが CDN POP 上にキャッシュされる期間。最大は 3 年です。 | |
オリジン TTL に従う | 有効にすると、オリジンサーバーのキャッシュポリシーが優先され、このルールは上書きされます。 | |
[オリジンの No-Cache ヘッダーを無視] | 有効にすると、CDN はオリジンサーバーからの次の | |
POP キャッシュポリシーに従う | 有効にすると、CDN は有効なキャッシュポリシー (例: | |
強制再検証 | この設定は、有効期限が 0 秒に設定されている場合にのみ有効です。
| |
重み | ルールの優先度。値は 1 から 99 までです。値が大きいほど優先度が高くなります。 | |
ルール条件 | リクエストパラメーター (例:ヘッダー、URL パラメーター) に基づいてルールの範囲を絞り込むことができます。 |
API の利用
BatchSetCdnDomainConfig 操作を呼び出して、ドメインを一括で設定します。
ルール変更の即時適用
新規または変更されたルールは、新しくキャッシュされるリソースにのみ適用されます。変更前にキャッシュされたリソースは、有効期限が切れるまで古いキャッシュポリシーを使用し続けます。
ネットワーク全体に新しいルールを即時適用するには、既存のキャッシュを手動でクリアする必要があります。ルールを変更した場合は、リソースのパージ機能を使用してキャッシュされたコンテンツを更新します。新しいルールを追加した場合は、リソースのプリフェッチ機能を使用してキャッシュを事前に読み込みます。
設定の確認
設定後、curl コマンドまたはブラウザの開発者ツールを使用してリソースの HTTP レスポンスヘッダーを検査し、キャッシュが期待どおりに機能していることを確認できます。
1. 確認コマンドの実行
ターミナルで次のコマンドを実行して、設定をテストします。
curl -I "https://your.domain.com/path/to/file.jpg"2. 主要なレスポンスヘッダーの解釈
レスポンスヘッダー | 一般的な値と解釈 |
| リクエストがキャッシュヒットしたかどうかを示します。 |
| [クライアントは CDN キャッシュポリシーに従う] が有効な場合、このヘッダーはブラウザに送信されるキャッシュディレクティブ (例: |
| CDN POP 上でリソースに設定された合計キャッシュ期間 (秒単位)。 |
ベストプラクティス
バージョン管理されたファイル名を使用する (推奨):
style.cssのような静的リソースを更新する際は、style-v2.cssやstyle-a1b2c3d.cssのようにバージョンやハッシュ値を含む新しいファイル名を使用し、HTML 内の参照を更新します。この方法では手動でのキャッシュ更新が不要で、ユーザーは即座に最新のコンテンツを取得できます。これは、キャッシュ更新を管理するための推奨される方法です。動的アセットと静的アセットを分離する:動的リソースと静的リソースには、異なるドメインまたはディレクトリパスを使用します。ポリシーの競合を避けるために、各リソースタイプに対して個別の、重みの高いキャッシュルールを設定します。例えば、
/static/ディレクトリ配下のすべてのリソースに長いキャッシュ期間を設定し、/api/ディレクトリ配下のリソースにはキャッシュしない設定をします。ブラウザキャッシュを利用する:[POP キャッシュポリシーに従う] を有効にして、POP への繰り返しリクエストを減らし、読み込み速度を向上させ、トラフィックを節約します。
キャッシュ期間を短すぎないように設定する:キャッシュ期間が短すぎると、頻繁にオリジンリクエストが発生し、アクセラレーションの利点が失われ、オリジンサーバーのトラフィックとコストが増加します。
キャッシュ期間を長すぎないように設定する:キャッシュ期間が長すぎると、クライアントがタイムリーなデータ更新を受け取れなくなる可能性があります。頻繁な更新が必要なコンテンツには、キャッシュ更新機能またはバージョン管理されたファイル名を使用します。
HTTP キャッシュ制御の仕組み
HTTP プロトコルは、キャッシュ制御を実装するために 3 種類のヘッダーを定義しています。
