CDN ノードがオリジンサーバーからリソースを取得すると、オリジンサーバーはレスポンスステータスコードを返します。 Alibaba Cloud CDN では、ステータスコードのキャッシュ期間を設定できます。 クライアントが同じリソースを再度リクエストすると、CDN はオリジンフェッチを行わずにステータスコードを直接返すため、オリジンサーバーの負荷が軽減されます。 設定されたキャッシュ期間が期限切れになると、オリジンフェッチが再度トリガーされます。
シナリオ
ステータスコード TTL は、主にオリジンサーバーが異常なステータスコードを返すシナリオで利用されます。これは、CDN ノードがこれらのステータスコードに対して実行するキャッシュアクションを指定するものです。
通常、CDN ノードがリクエストされたリソースをオリジンサーバーから正常にフェッチした場合、つまりオリジンサーバーが 2xx ステータスコードを返した場合、リソースは「CDNキャッシュの有効期限の設定」に基づいてキャッシュされます。オリジンサーバーがすべてのステータスコード (たとえば、2xx 以外のステータスコード) に迅速に応答できず、オリジンサーバーですべてのリクエストが処理されるのを避けたい場合は、ステータスコード TTL を設定できます。これにより、CDN ノードはステータスコードを直接返し、オリジンサーバーの負荷を軽減します。
典型的なシナリオ
オリジンサーバーからファイル A が削除されたにもかかわらず、クライアントからのリクエストが継続して発生するケースを考えます。CDN ノードはファイル A をキャッシュしていないため、ファイル A へのすべてのリクエストがオリジンサーバーに転送され、オリジンサーバーは 4xx ステータスコードを返します。これにより、オリジンサーバーの負荷が大幅に増加します。CDN ノードで 4xx ステータスコードのキャッシュが設定されている場合、CDN ノードはファイル A に対する最初のオリジンフェッチ後に 4xx ステータスコードをキャッシュします。設定されたキャッシュ期間内であれば、クライアントがファイル A を再度リクエストした際に、CDN ノードはオリジンフェッチを行うことなく、4xx ステータスコードを直接返します。
異常なステータスコードのキャッシュルール
204、301、305、404、405、414、424、429、500、501、502、503、504 のステータスコードの場合、キャッシュルールは次のとおりです:
オリジンサーバーが
set-cookieレスポンスヘッダーを返す場合、CDN はレスポンスをキャッシュしません。オリジンサーバーが Set-Cookie レスポンスヘッダーを返さない場合、レスポンスは CDN コンソールで設定されたステータスコード TTL に基づいてキャッシュされます。 複数のルールが設定されている場合、有効なルールがどのように決定されるかについては、複数のルールの優先度をご参照ください。
オリジンサーバーが Set-Cookie レスポンスヘッダーを返さず、かつ CDN コンソールでステータスコード TTL が設定されていない場合、レスポンスは、オリジンサーバーによって設定された Pragma、Cache-Control、または Expires レスポンスヘッダーに基づいてキャッシュされます。
オリジンサーバーが Set-Cookie、Pragma、Cache-Control、または Expires レスポンスヘッダーを返さず、かつ CDN コンソールでステータスコード TTL が設定されていない場合、レスポンスはデフォルトで 1 秒間キャッシュされます。
302、307、403 のステータスコードの場合、キャッシュルールは次のとおりです:
オリジンサーバーが
set-cookieレスポンスヘッダーを返す場合、CDN はレスポンスをキャッシュしません。オリジンサーバーが Set-Cookie レスポンスヘッダーを返さない場合、レスポンスは CDN コンソールで設定されているステータスコード TTL に基づいてキャッシュされます。複数のルールが設定されている場合、有効なルールの決定方法については、「複数のルールの優先順位」をご参照ください。
オリジンサーバーが Set-Cookie レスポンスヘッダーを返さず、かつ CDN コンソールでステータスコード TTL が設定されていない場合、レスポンスは、オリジンサーバーによって設定された Pragma、Cache-Control、または Expires レスポンスヘッダーに基づいてキャッシュされます。
オリジンサーバーが Set-Cookie、Pragma、Cache-Control、または Expires レスポンスヘッダーを返さず、かつ CDN コンソールでステータスコード TTL が設定されていない場合、レスポンスはキャッシュされません。
304 ステータスコードの場合、CDN はレスポンスをキャッシュせず、キャッシュ期間もいかなる方法でも設定できません。
400 ステータスコードなど、その他の異常なステータスコードの場合、キャッシュルールは次のとおりです:
オリジンサーバーが
set-cookieレスポンスヘッダーを返す場合、CDN はレスポンスをキャッシュしません。オリジンサーバーが
Set-Cookieレスポンスヘッダーを返さない場合、レスポンスは CDN コンソールで設定されたステータスコード TTL に基づいてキャッシュされます。複数のルールが設定されている場合、有効なルールの決定方法については、「複数のルールの優先順位」をご参照ください。その他のシナリオでは、レスポンスはキャッシュされません。
Range オリジンフェッチを使用するリクエストの場合、CDN ノードがオリジンサーバーから 206 以外のステータスコードを受信すると、CDN ノードはキャッシュされたスライスを削除します (オリジンフェッチがタイムアウトしても、キャッシュされたファイルは削除されません)。
レンジオリジンフェッチでは、オリジンサーバーは大きなファイルを複数の小さなスライスに分割し、CDN ノードに返します。 たとえば、ファイルが 10 個のスライスに分割され、CDN ノードが 5 個のスライスをキャッシュしているとします。 ノードが 6 番目のスライスをリクエストしたときに、オリジンサーバーは 5xx ステータスコードを返します。 この場合、以前にキャッシュされていた 5 つのスライスはすべて削除されます。
複数ルールの優先度
複数のステータスコードキャッシュルールを設定できます。リクエストが同時に複数のルールに一致する場合、1つのルールのみが有効になります。有効なルールは次のように決定されます:
評価の順序:
まずルールタイプ (ファイル拡張子 > ディレクトリ) が評価され、次にルールの作成時間 (作成が早いルール > 作成が遅いルール) が評価されます。
異なるタイプのルールの優先度:ファイル拡張子 > ディレクトリ
たとえば、あるリクエストが同時に 2 つのルールに一致し (両方のルールで 404 ステータスコードが設定されている)、ルールタイプが [ファイル拡張子] と [ディレクトリ] であるとします。 この場合、404 ステータスコードの有効期限は、タイプが [ファイル拡張子] であるルールによって決定されます。 具体的な例については、「設定例」をご参照ください。
同じタイプのルールの優先度:作成が早いルール > 作成が遅いルール (ルールリストの上から下の順)。
たとえば、あるリクエストが 2 つのルールに同時に一致し、両方のルールに 404 ステータスコードが設定されていて、かつルールのタイプ (両方ともファイル拡張子タイプ、または両方ともディレクトリタイプ) が同じである場合です。この場合、404 ステータスコードの有効期限は、最初に作成されたルールによって決定されます。具体的な例については、設定例をご参照ください。
操作手順
Alibaba Cloud CDN コンソールにログインします。
左側のナビゲーションペインで [ドメイン名 ] をクリックします。
[ドメイン名] ページで、管理対象のドメイン名を見つけ、[アクション] 列の [管理] をクリックします。

ドメイン名の左側のナビゲーションウィンドウで、[キャッシュ設定] をクリックします。
HTTP ステータスコード有効期限 タブをクリックします。
追加 をクリックし、ステータスコード TTL を設定します。
パラメーター
説明
[タイプ]
ディレクトリ と ファイル拡張子 の 2 種類がサポートされています。ビジネス要件に基づいて種類を選択してください。
説明異なるタイプのルールの優先度:ファイル拡張子 > ディレクトリ。詳細については、「異常なステータスコードのキャッシュルール」をご参照ください。
[アドレス]
タイプをディレクトリに設定した場合、以下の項目にご注意ください。
一度に追加できるディレクトリは 1 つだけです。
ディレクトリの完全なパスを入力します。パスはスラッシュ (/) で始まる必要があります (例:/directory/aaa)。
タイプをファイル拡張子に設定した場合、次の項目にご注意ください。
1 つ以上のファイル拡張子を入力します。複数のファイル拡張子はコンマ (,) で区切ります (例:
jpg,txt)。説明異なるレコードで設定されたファイル拡張子が完全に同じで、大文字と小文字のみが異なる場合、後から作成されたレコードが先に作成されたレコードを上書きします。たとえば、
jpg,txtルールを作成した後に、別のJPG,TXTルールを作成すると、先に作成されたルールが上書きされます。この場合、小文字のルールを設定する必要がある場合は、txt と jpg のルールを個別に作成できます。設定されたルールは、有効になるときに大文字と小文字が厳密に区別されます。アスタリスク (*) ですべてのファイルタイプを指定することはできません。
[設定]
キャッシュするステータスコードと、そのキャッシュ期間を指定します。最大期間は3年です。単位:秒。設定ルールは以下のとおりです:
複数のステータスコードはコンマ (,) で区切ります。
2xx および 3xx ステータスコードの場合、個々のステータスコードの正確な設定のみが可能です。ワイルドカードによる一括設定はサポートされていません。たとえば、
201=10は設定できますが、2xx=12は設定できません。4xx および 5xx ステータスコードの場合、個々のステータスコードの正確な設定とワイルドカードによる一括設定の両方が可能です。たとえば、
401=10と4xx=12の両方が設定可能です。
[オリジンの TTL を優先]
このスイッチを有効にすると、オリジンサーバーがキャッシュポリシーヘッダー (Cache-Control と Pragma を含む) を返した場合、オリジンサーバーが返したキャッシュポリシーが優先されます。
[オリジンの No-Cache ヘッダーを無視]
このスイッチをオンにすると、CDN ノードは、オリジンサーバーから返される次のキャッシュポリシーヘッダーを無視します。これらのヘッダーはすべて、コンテンツがキャッシュされないことを示します。
Cache-Control: no-store
Cache-Control: no-cache
Cache-Control: max-age=0
Pragma: no-cache
[クライアントは CDN のキャッシュポリシーに従う]
このスイッチをオンにすると、CDN ノードは、最終的に適用されるキャッシュポリシーをクライアントに返します。
[コンテンツの強制再検証]
このパラメーターは、キャッシュの有効期限が 0 に設定されている場合にのみ有効です。効果は以下のとおりです:
オフ (デフォルト): CDN のキャッシュ有効期限を 0 に設定すると、ファイルは CDN ノードにキャッシュされなくなり、リクエストごとにオリジンフェッチがトリガーされてコンテンツが取得されます。
有効: CDN のキャッシュ有効期限を 0 に設定すると、ファイルは CDN ノードにキャッシュされますが、キャッシュされたコンテンツを再検証するために、リクエストごとにオリジンフェッチがトリガーされます。
OK をクリックして設定を完了します。
ステータスコード TTL を設定した後、有効期限 リストで現在の設定を変更または削除できます。
設定例
例1:ディレクトリタイプのルール
次の例のように、ディレクトリタイプのルールを作成します。
/directory/aaa ディレクトリでは、すべての 4xx ステータスコードが 10 秒間キャッシュされ、201 ステータスコードが 15 秒間キャッシュされます。これらの期間内では、CDN ノードは対応するリクエストに直接応答します。この期間が終了すると、オリジンフェッチが発生します。
例2:ファイル拡張子タイプのルール
次の例のように、ファイル拡張子タイプのルールを作成します。
拡張子が .jpg または .txt のファイルの場合、403 ステータスコードは 10 秒間キャッシュされ、404 ステータスコードは 15 秒間キャッシュされます。これらの期間内では、CDN ノードは対応するリクエストに直接応答します。この期間が終了すると、オリジンフェッチが発生します。
例3:異なるタイプのルールの優先度
次の例のように、ディレクトリタイプのルール (404 ステータスコードのキャッシュ期間を 10 秒に設定) とファイル拡張子タイプのルール (404 ステータスコードのキャッシュ期間を 20 秒に設定) が作成されているとします。
ユーザーが
http://example.com/directory/aaa/test.jpgをリクエストします。リソースは CDN ノードにキャッシュされていないため、CDN ノードはオリジンサーバーにリソースをリクエストし、オリジンサーバーは 404 ステータスコードを返します。このリクエストは、ディレクトリタイプのルールとファイル拡張子タイプのルールの両方に一致します。異なるタイプのルールは ファイル拡張子 > ディレクトリ の順序で有効になるため、ファイル拡張子タイプのルールが有効になり、404 ステータスコードの実際のキャッシュ期間は 20 秒になります。例4:同じタイプの複数ルールの優先度
最初に /directory を対象とするディレクトリタイプのルール1 (404 ステータスコードのキャッシュ期間を 15 秒に設定) が作成され、次に /directory/aaa を対象とするディレクトリタイプのルール2 (404 ステータスコードのキャッシュ期間を 10 秒に設定) が作成されたとします。
ユーザーが
http://example.com/directory/aaa/test.jpgをリクエストします。リソースは CDN ノードにキャッシュされていないため、CDN ノードはオリジンサーバーにリソースをリクエストし、オリジンサーバーは 404 ステータスコードを返します。このリクエストは両方のディレクトリタイプのルールに一致します。同じタイプのルールは 作成が早いルール > 作成が遅いルール の順序で有効になるため、先に作成されたディレクトリタイプのルール1が有効になり、404 ステータスコードの実際のキャッシュ期間は 15 秒になります。例5:301 リダイレクトが永続的にキャッシュされる問題の解決
CDN で高速化されたドメイン名が、継続的に別のドメイン名への 301 リダイレクトを返しているが、オリジンサーバーに直接 (CDN をバイパスして) アクセスすると、リダイレクトが返されなくなったとします。この場合、ステータスコード TTL にルールを追加し、ステータスコードを
301に、キャッシュ期間を0に設定します (つまり、301=0)。これにより、CDN ノードは 301 レスポンスをキャッシュしなくなります。設定が完了したら、URL の更新タスクを送信して CDN キャッシュを更新し、キャッシュされた 301 レスポンスをクリアして、ルールを即時に有効にします。その後、ローカルブラウザーのキャッシュをクリアし、再度 URL にアクセスして結果を確認します。