CDN エッジノードがオリジンサーバーからリソースをフェッチする際、オリジンサーバーは HTTP ステータスコードを返します。デフォルトでは、CDN はオリジンサーバーのキャッシュヘッダーに基づいて、そのステータスコードをキャッシュするかどうかおよびキャッシュ期間を決定します。ステータスコード TTL を設定すると、このデフォルト動作をオーバーライドできます。つまり、各ステータスコードごとにカスタムのキャッシュ期間を指定することで、TTL が有効期限切れになるまで、エッジノードがクライアントに直接応答し、新たなオリジンフェッチを実行しないようにできます。
仕組み
エッジノードがキャッシュに存在しないリソースを要求した場合、オリジンサーバーから該当リソースをフェッチし、ステータスコードを受信します。そのステータスコードに対して TTL を設定済みの場合、エッジノードは指定された期間だけそのステータスコードをキャッシュします。この期間中、同一リソースに対する後続のリクエストには、キャッシュされたステータスコードが即座に応答され、オリジンフェッチは発生しません。TTL が有効期限切れになると、次のリクエストで新たにオリジンフェッチがトリガーされます。
ユースケース: ファイルがオリジンサーバーから削除されたにもかかわらず、クライアントが引き続きそのファイルを要求している場合です。TTL を設定していないと、すべてのリクエストがオリジンサーバーに到達し、404 応答を返すため、オリジンサーバーの負荷が増加します。404 ステータスコードに対して 10 秒の TTL を設定すると、エッジノードは最初の 404 応答をキャッシュし、その後 10 秒間はそれをクライアントに直接提供します。
デフォルトのキャッシュ動作
以下の表は、コンソールで TTL を設定していない場合、かつオリジンサーバーが Set-Cookie ヘッダーを返さない場合に、CDN が異常なステータスコードをどのように処理するかをまとめたものです。
| ステータスコードのグループ | デフォルト動作(コンソール設定なし、Set-Cookie なし) |
|---|---|
| 204、305、404、405、414、424、429、500、501、502、503、504 | Pragma、Cache-Control、または Expires ヘッダー(オリジンサーバーから返される)に従ってキャッシュされます。これらのヘッダーがいずれも存在しない場合は、1 秒間キャッシュされます。 |
| 302、307、403 | Pragma、Cache-Control、または Expires ヘッダー(オリジンサーバーから返される)に従ってキャッシュされます。これらのヘッダーがいずれも存在しない場合は、キャッシュされません。 |
| 304 | キャッシュされません。このステータスコードに対して TTL を設定することはできません。 |
| その他の異常なステータスコード(例:400) | コンソールで TTL を設定しない限り、キャッシュされません。 |
オリジンサーバーが Set-Cookie ヘッダーを返す場合、ステータスコードやコンソールでの設定内容に関係なく、CDN は応答をキャッシュしません。異常なステータスコードのキャッシュルール
ステータスコード 204、305、404、405、414、424、429、500、501、502、503、504
オリジンサーバーが
set-cookieレスポンスヘッダーを返す場合、CDN は応答をキャッシュしません。オリジンサーバーが Set-Cookie ヘッダーを返さない場合、応答は CDN コンソールで設定した期間だけキャッシュされます。複数のルールが重なる場合の優先順位については、「複数ルールの優先順位」をご参照ください。
Set-Cookie ヘッダーが存在せず、コンソールで TTL の設定も行われていない場合、応答はオリジンサーバーから返される
Pragma、Cache-Control、またはExpiresレスポンスヘッダーに従ってキャッシュされます。上記のいずれにも該当しない場合(Set-Cookie なし、コンソール設定なし、かつ
Pragma、Cache-Control、Expiresのいずれのヘッダーも存在しない場合)、応答は 1 秒間キャッシュされます。
ステータスコード 302、307、403
オリジンサーバーが
set-cookieレスポンスヘッダーを返す場合、CDN は応答をキャッシュしません。オリジンサーバーが Set-Cookie ヘッダーを返さない場合、応答は CDN コンソールで設定した期間だけキャッシュされます。
Set-Cookie ヘッダーが存在せず、コンソールで TTL の設定も行われていない場合、応答はオリジンサーバーから返される
Pragma、Cache-Control、またはExpiresレスポンスヘッダーに従ってキャッシュされます。上記のいずれにも該当しない場合、応答は キャッシュされません(上記のグループとは異なり、1 秒間のフォールバックはありません)。
ステータスコード 304
CDN は 304 応答をキャッシュしません。このステータスコードに対して TTL を設定することはできません。
その他の異常なステータスコード(例:400)
オリジンサーバーが
set-cookieレスポンスヘッダーを返す場合、CDN は応答をキャッシュしません。オリジンサーバーが Set-Cookie ヘッダーを返さない場合、応答は CDN コンソールで設定した期間だけキャッシュされます。
上記以外のすべてのシナリオでは、応答はキャッシュされません。
Range オリジンフェッチの動作
Range オリジンフェッチでは、オリジンサーバーが大規模なファイルを小さなシャードに分割し、それらを順次エッジノードに返します。エッジノードが Range オリジンフェッチ中にオリジンサーバーから 206 以外のステータスコードを受信した場合、そのファイルについて既にキャッシュされているすべてのシャードが削除されます。
例: ファイルが 10 個のシャードに分割されています。エッジノードは 5 個のシャードをキャッシュ済みです。エッジノードが 6 番目のシャードを要求した際、オリジンサーバーが 5xx ステータスコードを返しました。CDN は、すでにキャッシュ済みの 5 個のシャードをすべて削除します。
オリジンフェッチのタイムアウトは、キャッシュ済みのシャードを削除する原因にはなりません。
複数ルールの優先順位
リクエストが同一ステータスコードに対して複数のキャッシュルールにマッチする場合、適用されるのは 1 つのルールのみです。CDN は、以下のようにして有効なルールを決定します:
タイプによる優先順位: ファイル拡張子ルールは、ディレクトリルールよりも優先されます。
作成時刻による優先順位(同タイプの場合): 同じタイプのルールが複数ある場合、先に作成されたルール(ルール一覧で上位に表示されるもの)が適用されます。
評価順序は、ファイル拡張子 > ディレクトリ であり、同じタイプの場合は 古いもの > 新しいもの です。
ステータスコードキャッシュルールの作成
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
構成済みかつアクティブな Alibaba Cloud CDN ドメイン名
CDN コンソール へのアクセス権限
操作手順
CDN コンソール にログインします。
左側のナビゲーションウィンドウで、ドメイン をクリックします。
ドメイン ページで、対象のドメイン名を検索し、操作 列の 管理 をクリックします。
ドメインのナビゲーションウィンドウで、キャッシュ をクリックします。
ステータスコード TTL タブをクリックします。
ルールの作成 をクリックし、以下のパラメーターを設定します。
パラメーター 説明 タイプ ディレクトリ または ファイル拡張子 を選択します。ファイル拡張子ルールは、ディレクトリルールよりも優先されます。 オブジェクト ディレクトリ: 単一のディレクトリの完全なパスを入力します。パスはスラッシュ ( /) で始める必要があります。例:/directory/aaa。ファイル拡張子: カンマ区切りで 1 個以上のファイル拡張子を入力します。例:jpg,txt。ルールは大文字小文字を区別します:jpgとJPGは異なる拡張子として扱われ、同じ拡張子(大文字小文字が異なる)に対する後続のルールが先行するルールを上書きします。アスタリスク (*) はサポートされていません。有効期限 ステータスコードとそのキャッシュ期間を指定します。最大期間は 3 年です。単位は秒です。複数のステータスコードはカンマで区切ります。2xx および 3xx コードについては、個別のコードのみを指定します(例: 201=10)。ワイルドカードパターン(例:2xx=12)は、2xx および 3xx コードではサポートされていません。4xx および 5xx コードについては、個別のコード(例:401=10)およびワイルドカードパターン(例:4xx=12)の両方がサポートされています。オリジンの TTL を尊重 有効化すると、オリジンサーバーが Cache-ControlまたはPragmaヘッダーを返す場合、オリジンサーバーのキャッシュポリシーが設定済みの TTL よりも優先されます。オリジンの no-cache ヘッダーを無視 有効化すると、CDN エッジノードはオリジンサーバーから返される以下のヘッダーを無視します: Cache-Control: no-store、Cache-Control: no-cache、Cache-Control: max-age=0、およびPragma: no-cache。エッジノードのキャッシュポリシーに従う 有効化すると、CDN エッジノードは最終的な有効なキャッシュポリシーをクライアントに返します。 強制再検証 キャッシュ期間が 0に設定されている場合にのみ適用されます。無効(デフォルト): CDN ノードはコンテンツをキャッシュしません。すべてのリクエストでオリジンフェッチが実行されます。有効: CDN ノードはコンテンツをキャッシュしますが、配信前にオリジンフェッチを実行してキャッシュ済みコンテンツの再検証を行います。
OK をクリックします。
ルールは 有効期限 タブのリストに表示されます。ルールの更新または削除を行うには、該当ルールの行にある 編集 または 削除 をクリックします。
設定例
例 1:ディレクトリルール

このルールは /directory/aaa ディレクトリを対象としています。このディレクトリ内のリクエストに対して、すべての 4xx ステータスコードは 10 秒間キャッシュされ、201 ステータスコードは 15 秒間キャッシュされます。これらの期間中、エッジノードはオリジンフェッチを実行せずに直接応答します。キャッシュ期間が有効期限切れになると、次のリクエストでオリジンフェッチがトリガーされます。
例 2:ファイル拡張子ルール

このルールは .jpg および .txt ファイルを対象としています。これらのファイルに対して、403 ステータスコードは 10 秒間キャッシュされ、404 ステータスコードは 15 秒間キャッシュされます。
例 3:ルールタイプが異なる場合の優先順位

404 ステータスコードに対して、異なる TTL を持つディレクトリルールとファイル拡張子ルールが設定されています。クライアントが http://example.com/directory/aaa/test.jpg を要求します。リソースはキャッシュされていません。エッジノードはオリジンサーバーからリソースをフェッチし、404 を返します。このリクエストは両方のルールにマッチします。ただし、ファイル拡張子 > ディレクトリ の優先順位により、ファイル拡張子ルールが適用され、404 ステータスコードは 20 秒間キャッシュされます。
例 4:ルールタイプが同一の場合の優先順位

ディレクトリルール 1 は /directory を対象とし、ディレクトリルール 2 は /directory/aaa を対象としています。両方とも 404 ステータスコードに異なる TTL を割り当てています。クライアントが http://example.com/directory/aaa/test.jpg を要求します。このリクエストは両方のディレクトリルールにマッチします。ただし、同一タイプのルールでは 古いもの > 新しいもの の優先順位が適用されるため、先に作成されたディレクトリルール 1 が適用され、404 ステータスコードは 15 秒間キャッシュされます。
API リファレンス
API を使用して状態コード TTL を設定するには、BatchSetCdnDomainConfig を使用します。