すべてのプロダクト
Search
ドキュメントセンター

CDN:CDNキャッシュの有効期限の設定

最終更新日:Sep 11, 2026

キャッシュ有効期限ルールは、CDN の POP (Point of Presence) におけるリソースのキャッシュ期間を制御し、コンテンツの鮮度、アクセスパフォーマンス、オリジンフェッチコストのバランスをとることを可能にします。このトピックでは、キャッシュルールの仕組み、設定方法と検証方法、キャッシュ問題のトラブルシューティング方法、および本番環境向けのベストプラクティスについて説明します。

仕組み

リクエストが CDN の POP に到達すると、システムはキャッシュされたコピーを配信するか、オリジンサーバーから最新のコンテンツを取得するかを決定します。以下の手順は優先順に評価され、番号が小さいほど優先度が高くなります。

  1. オリジンの no-cache ディレクティブ — オリジンサーバーが Pragma: no-cacheCache-Control: no-cacheCache-Control: no-store、または Cache-Control: max-age=0 で応答した場合、CDN はリソースをキャッシュしません。 これらのリソースを強制的にキャッシュするには、キャッシュ有効期限ルールを設定する際に レスポンスヘッダーを無視 を選択します。

  2. [コンソール] で設定されたキャッシュルールCDN [コンソール] で設定されたキャッシュルールは、ステップ 1 で説明されているようにオリジンサーバーが no-cache ディレクティブを明示的に送信する場合を除き、優先されます。複数の [コンソール] のキャッシュルールがリクエストに一致する場合、重みが大きい方のルールが優先され、重みが同じルールは作成順に解決されます。リクエストがいずれかのキャッシュルールに一致すると、他のルールは評価されません。

  3. オリジンレスポンスヘッダー — リクエストが CDN コンソールルールに一致しない場合、または一致したルールで オリジンの TTL を優先 が有効になっている場合、CDN はオリジンサーバーの HTTP レスポンスヘッダーに従います。 ヘッダーの優先度は、高い順に次のとおりです:Cache-Control > Expires > Last-Modified > ETag

  4. デフォルトの no-cache ポリシー — リクエストが CDN コンソールのどのキャッシュルールにも一致せず、オリジンサーバーが Cache-Control などのキャッシュレスポンスヘッダーを返さない場合、CDN は no-cache ポリシーを適用します。

  5. CDN は、オリジンサーバーがステータスコード 200、203、206、300、301、308、または 410 を返すリクエストにのみキャッシュポリシーを適用します。404 などのステータスコードの有効期限を設定するには、キャッシュ設定 > HTTP ステータスコード有効期限 ページを使用します。

次の表は、複数のコンソールのキャッシュルールがリクエストに一致する場合の優先順位ロジックを示しています。

シナリオ

優先順位ロジック

異なる重み

重みがより高い (1~99) ルールが優先されます。

ルール A (ディレクトリ /image/、重み 50) とルール B (ファイル拡張子 .jpg、重み 90) が両方とも image/a.jpg に一致します。ルール B の方が重みが高いため、適用されます。

同じ重み

最も早く作成されたルールが優先されます。

ドメイン名に対して、ディレクトリールール (/static/) とファイル拡張子ルール (.js) を、両方とも重み 60 で設定した場合、ディレクトリールールがファイル拡張子ルールより前に作成されていれば、/static/app.js へのリクエストはディレクトリールールに一致します。

次の表は、各オリジンサーバーのレスポンスヘッダーがどのように処理されるかを示しています。

レスポンスヘッダー

CDNでの対応

注意点と例

Cache-Control

最初に s-maxage (CDN のキャッシュ期間) を使用し、次に max-age を使用します。

例:s-maxage=86400, max-age=3600

Expires

有効期限を指定します。このヘッダーは、Cache-Control ヘッダーが存在しない場合にのみ使用されます。

例:Expires: Wed, 21 Oct 2025 07:28:00 GMT

Last-Modified

Last-Modified ヘッダーは、リソースが最後に変更された日時を示すタイムスタンプです。キャッシュ期間は次のように計算されます:(現在時刻 - Last-Modified) × 0.1。計算された期間は、10 秒~3,600 秒の範囲に制限されます。

例:Last-Modified: Wed, 21 Oct 2023 07:28:00 GMT

ETag

ETag は、サーバーがリソースの特定バージョンに対して生成する一意の識別子で、通常はハッシュまたはバージョン番号です。デフォルトでは、ETag を持つリソースは 10 秒間キャッシュされます。

例:ETag: "abc123"

キャッシュルールのマッチングロジック

CDNキャッシュの有効期限ルールは、異なるマッチング動作を持つ 2 つのルールタイプに対応しています。

  • [ディレクトリ]:パスのプレフィックス (前方一致) でマッチングします。たとえば、/static/ を設定すると、そのディレクトリ配下のすべてのリソース (たとえば、/static/image/1.jpg/static/css/style.css) に一致します。/ を設定すると、すべてのパスに一致します。ディレクトリパスはスラッシュ (/) で始まる必要があります。各ルールは 1 つのディレクトリのみをサポートします。

  • [ファイル拡張子]:拡張子の完全一致でマッチングします。拡張子はドットなしで入力し、複数の拡張子はカンマで区切ります (例:jpg,css,js)。拡張子は英数字のみに対応し、特定の拡張子タイプに制限はありません。以下の拡張子タイプはすべて設定可能です:

    • 一般的な静的リソースの拡張子:jpgpnggifcssjshtml

    • フォントファイルの拡張子:ttfotfwoffwoff2eot

    • 動的ページの拡張子:phpaspxjsp

    • その他の英数字の拡張子

キャッシュルールのマッチングに関する以下の点に注意してください。

  • 複数のキャッシュルールが同じリクエストに一致する場合 (たとえば、ディレクトリールールとファイル拡張子ルール)、より高い [重み] を持つルールが優先されます。重みが等しいルールは作成順 (先に作成されたルールが優先) に解決されます。詳細については、「仕組み」をご参照ください。

  • ルール条件 (ルールエンジンで設定) をキャッシュルールに関連付ける場合、複数の条件は AND ロジックで評価され、リクエストが一致するにはすべての条件を満たす必要があります。

  • すべての動的拡張子 (たとえば、aspx) に包括的な no-cache ルールを設定する場合、キャッシュするつもりの静的リソースに影響しないように注意してください。フォントファイルをキャッシュするには、ttf,otf,woff,woff2,eot などの拡張子を持つ専用のルールを追加してください。

操作手順

説明

高速化ドメイン名を作成する際に選択する事業タイプ (画像と小容量ファイル、大容量ファイルのダウンロード、オンデマンドのビデオ/オーディオストリーミングなど) は、特定のファイル拡張子やパスに対して固定のキャッシュ期間を事前設定するものではありません。実際のキャッシュ動作は、コンソールで設定したキャッシュルールによって決まります。ドメイン名を作成した後、リソースのタイプと更新頻度に基づいてキャッシュルールを設定してください。

コンソール (推奨)

  1. Alibaba Cloud CDN コンソールで、ドメイン名ページに移動し、対象のドメイン名の横にある 管理 をクリックします。

  2. キャッシュ設定 > キャッシュ有効期限 ページで、追加 をクリックしてキャッシュルールを設定します。以下の表で各パラメーターを説明します。

パラメーター

説明

デフォルト/例

[タイプ]

ルールの範囲をディレクトリまたはファイル拡張子で指定します。ディレクトリ:パス配下のすべてのリソースに統一されたキャッシュルールを設定します。ファイル拡張子:特定のタイプのファイルに統一されたキャッシュルールを設定します。

ディレクトリ、ファイル拡張子

[アドレス]

選択したタイプに基づいて値を入力します。ディレクトリ:スラッシュ (/) で始まる必要があります (例:/static/)。単一のスラッシュ (/) はすべてのパスに一致します。一度に追加できるディレクトリは 1 つだけです。ファイル拡張子:1 つ以上のファイル拡張子をカンマで区切って入力します (例:jpg,png,css)。エントリは大文字と小文字を区別し、パイプ文字やその他の記号には対応していません。

/static/jpg,png,css

[有効期限]

POP におけるリソースのキャッシュ期間です。最大期間は 3 年です。

まれにしか更新されない静的リソース (画像やインストーラーなど):1 か月以上の期間を設定します。頻繁に更新される静的リソース (JS や CSS ファイルなど):1~7 日などの短い期間を設定します。動的コンテンツ (PHP や JSP ページなど):期間を 0 秒 (キャッシュしない) に設定します。

0 秒~3 年

[オリジンの TTL を優先]

デフォルトでは無効です。有効にすると、オリジンサーバーのキャッシュポリシーが優先され、このルールを上書きします。

オフ

[レスポンスヘッダーを無視]

有効にすると、オリジンサーバーからの次の no-cache ディレクティブは無視されます:Cache-Control: no-storeno-cache、または max-age=0、および Pragma: no-cache。リソースはコンソールのルールに従ってキャッシュされます。

オフ

[CDN のキャッシュルール優先]

有効にすると、CDN はレスポンスヘッダーで、POP で有効なキャッシュポリシー (例:max-age=3600) をクライアントに返します。

オフ

[コンテンツの強制再検証]

この設定は、有効期限が 0 秒に設定されている場合にのみ有効です。無効 (デフォルト、no-store キャッシュポリシーと同等):POP はファイルをキャッシュせず、すべてのリクエストはコンテンツを取得するためにオリジンサーバーに転送されます。有効 (no-cache キャッシュポリシーと同等):POP はファイルをキャッシュしますが、すべてのリクエストは 304 メカニズムを使用してオリジンサーバーで再検証されます。これは、リアルタイムの検証が必要でありながら、オリジンサーバーの帯域幅への負荷を軽減する必要があるシナリオで役立ちます。

オフ

[重み]

ルールの優先順位。有効な値は 1~99 です。値が大きいほど優先順位が高くなります。

推奨:きめ細かな制御を実現するために、特定のパスやファイル拡張子に高い重みを設定し、ルートディレクトリ (/) に低い重みを設定します。

1~99

[ルール条件]

ヘッダーや URL パラメーターなどのリクエストパラメーターに基づいて、ルールの範囲をさらに絞り込みます。これはデフォルトでは使用されません。条件を設定するには、ルールエンジンを使用します。ルール条件が参照される場合、キャッシュルールが設定された順序ではなく、関連する条件の優先順位に基づいてマッチングが行われます。

使用しない

各ルールタイプがリクエストにどのように一致するかの詳細については、「キャッシュルールのマッチングロジック」をご参照ください。

API

BatchSetCdnDomainConfig API を呼び出すと、複数のドメイン名を一括で設定できます。他の機能のパラメーター設定の詳細については、「ドメイン名設定機能」をご参照ください。

重要

新規または変更されたキャッシュルールは、変更後にキャッシュされるリソースにのみ適用されます。すでにキャッシュされているリソースは、有効期限が切れるまで以前のキャッシュポリシーを使用し続けます。

ルール変更の即時適用

新しいルールをネットワーク全体に即時適用するには、既存のキャッシュを手動でクリアする必要があります。ルールを変更した場合は、「リソースのパージとプリフェッチ」機能を使用して既存のキャッシュをパージしてください。新しいルールを追加した場合は、「リソースのプリフェッチ」機能を使用してリソースをプリフェッチしてください。

検証

設定が完了したら、curl コマンドまたはブラウザー開発者ツールを使用してリソースの HTTP レスポンスヘッダーを検査し、キャッシュが期待どおりに機能することを確認します。ルール変更がいつ有効になるかの詳細については、「ルール変更の即時適用」をご参照ください。

方法1:curlコマンドの使用

ターミナルで次のコマンドを実行して、設定をテストします。

curl -I "https://your.domain.com/path/to/file.jpg"

レスポンスヘッダーで X-Cache を確認します。HIT はリクエストが CDN キャッシュから配信されたことを意味し、MISS はキャッシュミスが発生してオリジンからフェッチされたことを意味します。各ヘッダーの詳細については、「主要なレスポンスヘッダーの解釈」をご参照ください。

方法2:ブラウザー開発者ツールの使用

ブラウザーの開発者ツール (F12) を開いて [ネットワーク] タブに移動し、リソース URL にアクセスしてリクエストを選択し、[レスポンスヘッダー] の X-Cache ヘッダーを確認することで、リソースが CDN キャッシュから提供されたかどうかを判断できます。

主要なレスポンスヘッダーの解釈

X-Cache

リクエストが CDN キャッシュにヒットしたかどうかを示します。

  • HIT:リクエストがキャッシュにヒットしました。

  • MISS:リクエストはキャッシュミスし、リソースがオリジンサーバーからフェッチされました。

Cache-Control

CDN のキャッシュルール優先 を有効にすると、CDN は、max-age=3600 のように、POP 上の有効なキャッシュポリシーをクライアントに返します。

X-Swift-SaveTime

  • クライアントが直接アクセスする L1 レイヤーの CDN POP にリソースが最初に入った時刻です。

  • 値は GMT 形式です。例:Sat, 19 Apr 2025 08:58:31 GMT

Ali-Swift-Global-Savetime

  • リソースが CDN POP に最初に入った時刻です。サイトのキャッシュアーキテクチャによっては、これは L2 POP または別のキャッシュレイヤーである場合があります。

  • 値は UNIX タイムスタンプです。たとえば、17450531112025-04-19 16:58:31 を示します。

X-Swift-CacheTime

CDN POP 上のリソースに設定されたキャッシュ期間を秒単位で示します。この値は保証ではなく、上限値です。Ali-Swift-Global-Savetime は Unix タイムスタンプで、X-Swift-SaveTime は GMT 時刻です。

  • X-Swift-CacheTime = Ali-Swift-Global-Savetime + CDN で設定されたキャッシュの有効期限 - X-Swift-SaveTime

  • X-Swift-CacheTime は、設定されたキャッシュの有効期限と完全に一致しない場合があります。次の状況が発生する可能性があります。

    • 設定されたキャッシュの有効期限 (例:3,600 秒) と等しくなります。

    • 設定されたキャッシュの有効期限よりわずかに短くなります。たとえば、設定された有効期限が 300 秒であるにもかかわらず、X-Swift-CacheTime が 295 秒である場合があります。これは、L1 POP が L2 POP からリソースをフェッチする際に高いレイテンシが発生した場合や、L1 POP と L2 POP のクロックが同期していない場合に発生する可能性があります。

    • キャッシュの有効期限が変更され、クライアントがリソースにアクセスしたときに、L1 POP のキャッシュは期限切れになっているが L2 POP のキャッシュは期限切れになっていないために負の値になることがあります。たとえば、有効期限が 3,600 秒から 300 秒に変更されたとします。クライアントが最初のアクセスから 600 秒後に再びリソースにアクセスすると、レスポンスには X-Swift-CacheTime: -300 が含まれます。キャッシュをパージして、新しい有効期限を有効にしてください。

  • POP 上でリソースへのアクセスが少ない場合、有効期限が切れる前に、より頻繁にアクセスされるリソースによって削除されることがあります。したがって、実際のキャッシュ期間は設定値よりも短くなる可能性があります。

ベストプラクティス

  • バージョン付きファイル名を使用する (推奨)style.css などの静的リソースを更新する場合は、style-v2.cssstyle-a1b2c3d.css のように、バージョンまたはハッシュを含む新しいファイル名を使用し、HTML の参照を更新します。この方法により、ユーザーは手動で CDN キャッシュをパージすることなく、すぐに最新のコンテンツを受信できます。これは、キャッシュされたコンテンツを更新するための推奨される方法です。

  • ブラウザキャッシュを効果的に使用するCDN のキャッシュルール優先 を有効にすると、CDN への繰り返しリクエストが削減され、読み込み速度が向上し、CDN のトラフィックを節約できます。

  • キャッシュ期間を過度に短く設定しない — キャッシュ期間が短いと、CDN が頻繁にオリジンフェッチを実行するため、アクセラレーションのメリットが損なわれ、オリジンサーバーのトラフィックとコストが増加します。

  • 長いキャッシュ期間に関する注意 — 長いキャッシュ期間は、クライアントがタイムリーにコンテンツの更新を受け取るのを妨げる可能性があります。頻繁な更新が必要なコンテンツについては、必ずキャッシュをパージするか、バージョン管理されたファイル名を使用してください。

  • ゲーム業界と小容量ファイルのシナリオ — ゲーム業界の小容量ファイルリソース (設定ファイルやアセットパッケージなど) で、更新頻度が低い (たとえば、週次または隔週) ものについては、キャッシュの有効期限を 15 日に設定するか、実際のリソース更新サイクルに合わせます。これにより、更新速度と高速化パフォーマンスのバランスが取れます。キャッシュ期間が短すぎると、頻繁なオリジンフェッチが発生して高速化の利点が減少し、長すぎると古いコンテンツがプレイヤーに提供される可能性があります。(推奨) コンテンツが更新された際には、パージとプリフェッチ機能を使用して、事前にキャッシュを更新してください。

  • robots.txt と sitemap.xml — これらのファイルは検索エンジンのクロールに直接影響します。これらが広範な拡張子ルールに一致して長期間キャッシュされ、更新が遅れるのを防ぐために、キャッシュ期間を別途設定してください。(推奨) これら 2 つのファイルのみを対象とするには、タイプとして [ディレクトリ] を選択し、[オブジェクト] フィールドに特定のファイルパス (たとえば、/robots.txt) を入力し、広範な拡張子ルールを上書きするために高い重みを設定します。ファイル拡張子で設定する場合は、txt,xml 拡張子に対して 1 時間から 1 日のキャッシュ期間を設定します。拡張子ルールは、robots.txt や sitemap.xml だけでなく、これらの拡張子を持つすべてのリソースに適用されます。頻繁に更新されるサイトマップについては、キャッシュ期間を 1 時間以下に設定してください。

トラブルシューティング

キャッシュが有効にならない、キャッシュミス、キャッシュヒット率が低い、コンテンツが更新されないなどの問題のトラブルシューティング方法については、「キャッシュ問題のトラブルシューティング」をご参照ください。

付録:HTTPキャッシュ制御メカニズム

このセクションでは、プロトコルの背景について説明します。POP での対応するキャッシュ動作については、「仕組み」をご参照ください。HTTP プロトコルは、キャッシュ制御のために 3 種類のヘッダーを使用します。

  1. 有効期限の検証

    クライアントがサーバーにリソースを要求すると、両者はリソースの有効期限について合意します。この時刻より前は、キャッシュされたコピーは有効と見なされ、この時刻を過ぎると無効になります。

    HTTP では、キャッシュの有効期限を制御するために、一般的に次のヘッダーが使用されます。

    ヘッダー

    プロトコルバージョン

    説明

    タイプ

    Pragma

    HTTP/1.0

    コンテンツをキャッシュすべきかどうかを示します。その値は通常 no-cache であり、ファイルがキャッシュされるべきではないことを意味します。HTTP/1.0 プロトコルのみをサポートするサーバーとの互換性のために、よく使用されます。

    Pragma: no-cache

    リクエスト/レスポンス

    Expires

    HTTP/1.0

    Expires レスポンスヘッダーは、キャッシュされたコンテンツが陳腐化する日時を指定します。0 のような無効な日付が使用された場合、そのリソースはすでに期限切れであることを意味します。

    Expires: Wed, 21 Oct 2025 07:28:00 GMT

    レスポンス

    Cache-Control

    HTTP/1.1

    Cache-Control レスポンスヘッダーは、さまざまなディレクティブを通じて柔軟なキャッシュ制御を提供し、ブラウザなどの最新のクライアントがこの目的で使用する主要なヘッダーです。

    次の 3 つの例は、ファイルがキャッシュされるべきでないことを示します:Cache-Control: no-cacheCache-Control: no-storeCache-Control: max-age=0。1 時間のキャッシュ有効期間の例:Cache-Control: max-age=3600

    リクエスト/レスポンス

  2. リソースタグの検証

    サーバーは、最初のレスポンスにリソースタグ (ETag など) を含めます。クライアントが同じリソースを再度要求すると、このタグをサーバーに送り返して検証を求めます。リソースが変更されていない場合、サーバーは HTTP ステータスコード 304 で応答し、クライアントはキャッシュされたコピーを使用できます。リソースが変更されている場合、サーバーは新しいコンテンツを送信します。

    HTTP では、キャッシュのバージョンを制御するために、一般的に次のヘッダーが使用されます。

    ヘッダー

    プロトコルバージョン

    説明

    タイプ

    Last-Modified

    HTTP/1.0

    リソースの最終変更時刻を示します。

    Last-Modified: Wed, 21 Oct 2023 07:28:00 GMT

    レスポンス

    ETag

    HTTP/1.1

    リソースの特定バージョンに一意の識別子を提供します。 ETag を比較することで、リソースが変更されたかどうかを判断できます。変更されていない場合、オリジンサーバーは完全なレスポンスを送信する必要がなくなります。

    ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"

    レスポンス

  3. コンテンツネゴシエーション

    キャッシュソフトウェアは、ディスクにキャッシュされたオブジェクトをインデックス化するためにキーワードを使用します。HTTP/1.0 では、リソース URL がキーワードとして使用されます。ただし、同じ URL でリソースの異なる表現が存在する可能性があります。それらを区別するには、Accept-Language や Accept-Charset ヘッダーなど、クライアントからのより多くの情報が必要です。コンテンツネゴシエーションに対応するために、HTTP/1.1 ではレスポンスメッセージに Vary ヘッダーが導入されました。このヘッダーは、コンテンツネゴシエーションに必要なリクエストヘッダーをリストします。

    コンテンツネゴシエーションでは、通常、HTTP Vary ヘッダーを使用して異なるキャッシュコピーを区別し、異なるクライアントが同じリソースを要求したときに異なるキャッシュコピーを受信できるようにします。

ヘッダー

プロトコルバージョン

説明

タイプ

Vary

HTTP/1.1

一般的な例: サーバーは Vary: Accept-Encoding を指定して、受信側 (CDN POP など) に、リソースの圧縮版と非圧縮版の 2 つのバージョンをキャッシュする必要があることを通知します。クライアントが CDN から同じリソースをリクエストした場合、古いブラウザは互換性の問題を回避するために非圧縮リソースを受信し、新しいブラウザはデータ転送トラフィックを削減するために圧縮リソースを受信できます。サーバーは、リクエストを送信するブラウザの種類を識別するために Vary: User-Agent を指定します。これにより、受信側 (CDN POP など) は、ブラウザの種類に基づいてリソースの異なるバージョンをキャッシュします。

Vary: Accept-EncodingVary: Accept-Encoding,User-Agent

レスポンス