このトピックでは、CDN キャッシュのシナリオにおけるトラブルシューティング方法を症状別にまとめています。キャッシュが有効にならない場合やキャッシュミス、低いキャッシュヒット率と高いオリジンフェッチ率、レスポンスヘッダーと CORS の例外、動画や大容量ファイルの例外、コンテンツの未更新やアクセスの例外について説明します。
一般的な事前確認手順
このトピックは、高速化ドメイン名が既に追加され、CNAME 名前解決が有効になっている Alibaba Cloud CDN を対象としています。Dynamic Route for CDN (DCDN) を使用している場合、一部の設定項目や機能名が異なる場合があります。実際のコンソールの表示をご参照ください。
以下のチェック項目は、ほとんどのキャッシュの問題に適用されます。環境による影響で誤った結論に至るのを避けるため、トラブルシューティングを開始する前に、これらの項目を1つずつ確認することを推奨します。
|
チェック項目 |
説明 |
|
CNAME 名前解決の正しさの確認 |
|
|
設定がグローバルに有効になったことの確認 |
コンソールでのルールステータスが [成功] である必要があります。設定が世界中の POP に配信されるまで、通常 3~5 分かかります。 |
|
ローカルブラウザキャッシュによる影響の排除 |
ブラウザキャッシュの影響を避けるため、プライベートブラウジングモードでテストするか、 |
|
既存の CDN キャッシュのクリア |
新しい設定は、有効になった後の新しいリクエストにのみ適用されます。以前のポリシーでキャッシュされたリソースについては、リフレッシュとプリフェッチ を使用して URL リフレッシュまたはディレクトリリフレッシュを送信します。 |
このトピックでは、いくつかの箇所でフォールバック手段としてキャッシュの有効期限を 0 秒に設定する方法を使用します。有効期限が 0 の場合、すべてのリクエストで back-to-origin が発生し、オリジンサーバーの負荷が大幅に増加して高速化効果が低下します。API エンドポイントなど、真にリアルタイムの応答が必要な動的コンテンツにのみ使用することを推奨します。静的リソースに対してグローバルに設定しないでください。
キャッシュヒットの判定
キャッシュの問題をトラブルシューティングする前に、レスポンスヘッダーでリソースのキャッシュステータスを確認します:
-
GET リクエストによるレスポンスヘッダーの確認:
curl -v -o /dev/null "http(s)://<アクセラレーションドメイン>/<リソースパス>"を実行します。curl -Iリクエスト (HEAD リクエスト) は、一部のシナリオでは POP 上のリソース本文に対する実際のキャッシュロジックをトリガーしないため、キャッシュミスという誤った結論に至ることがあります。検証には GET リクエストを使用することを推奨します。 -
X-Cache によるヒットステータスの判定:
HITはキャッシュヒットを示します。MISSまたはこのフィールドがない場合はキャッシュミスとなり、リクエストがオリジンフェッチをトリガーしたことを示します。 -
Age と X-Swift-CacheTime による残りキャッシュ期間の判定:
Ageはリソースが POP にキャッシュされてからの秒数を示し、X-Cache と合わせて解釈する必要があります。 X-Cache が MISS で Age が 0 の場合、リクエストはオリジンフェッチをトリガーしました。 X-Cache が HIT で Age が 0 の場合、リソースが 1 秒未満前にキャッシュされたことを示します。X-Swift-CacheTimeは許容される合計キャッシュ期間を示します。 残りの期間は、X-Swift-CacheTime から Age を引いた値と等しくなります。 -
リクエストが CDN を経由していることの確認:
ServerレスポンスヘッダーにAliyunOSSやnginxなどのオリジン識別子が表示され、X-Cache や X-Swift-CacheTime などの CDN レスポンスヘッダーが存在しない場合、リクエストは CDN の POP をバイパスして直接オリジンサーバーに到達しています。dig <アクセラレーションドメイン>またはnslookup <アクセラレーションドメイン>を実行して、最終的な解決結果を確認します。 CDN によって割り当てられた CNAME レコードのみを保持し、オリジンサーバーの IP を指す A/AAAA レコードとオリジンサーバーのドメイン名を指す CNAME レコードを削除してください。
キャッシュの効果がない問題とキャッシュミス
低いキャッシュヒット率と高いオリジンフェッチ率
レスポンスヘッダーとオリジン間リソース共有 (CORS) の例外
動画と大容量ファイルの例外
コンテンツとアクセスの異常
問題が解決しない場合の対処
チケットを送信する前に、次の方法でご自身で問題を切り分けることを推奨します:
-
リアルタイムログの確認:コンソールで、特定のリクエストのキャッシュステータス、オリジンフェッチステータス、レスポンスコードの分布を確認し、問題が集中している URL または時間帯を特定します。
-
コンソールの診断ツールの使用:問題が発生している URL を入力して診断し、名前解決、オリジンフェッチ、レスポンスヘッダーの情報を迅速に取得します。
-
比較テストの実施:同じリソースに対し、CDN 経由とオリジンサーバーへ直接、それぞれアクセスし、レスポンスヘッダーとコンテンツの差分を比較して、問題が CDN 側にあるか、オリジンサーバー側にあるかを判断します。
ご自身でトラブルシューティングを行った後も問題が解決しない場合は、特定を迅速化するため、チケットを送信する前に次の情報を収集することを推奨します:
-
高速化ドメイン名と該当するリクエスト URL。
-
問題を再現できる完全な
curl -vの出力 (リクエストヘッダーとレスポンスヘッダーを含む)。 -
問題が発生したおおよその時刻、リージョン、ISP。
-
オリジンサーバータイプ (OSS、ECS、SLB、サードパーティオリジンサーバーなど) と、オリジンサーバーが範囲リクエストをサポートしているかどうか。
-
試したトラブルシューティングステップと、各ステップの結果。
-
問題がキャッシュヒット率に関連する場合は、コンソールのヒット率のスクリーンショットと、対応する時間範囲。