CDNトラブルシュート(CDN移行)


更新の少ない通常のWebサイトであれば、使用しているCDNを異なるものへ変更しても問題は発生しなくなりました。ただし、いくつかのケースにおいてはトラブルが発生します。今回は、このようなトラブルについて原因をまとめます。

レンジリクエストへの対応

レンジリクエスト(巨大ファイルに対するファイルの部分取得)については、CDNより対応が大きく異なります。詳細については「レンジリクエスト」を参照ください。

Cookie、クエリ文字列の扱い

最近のCDNでは、動的ファイルに対するキャッシュとして、Cookie、クエリ文字列、ユーザエージェント等をキーとしたキャッシュが可能になっています。ただし、CDNにより対応レベルは異なり、以下に分類されます

  • Cookie等をキーとして認識できる
  • ホワイトリスト(オブジェクト認識に使用するキー)の指定が可能
  • ブラックリスト(オブジェクト認識に使用しないキー)の指定が可能

オリジンサーバのHTTPヘッダ

オリジンサーバが発行するcache-controlなどのHTTPヘッダ(キャッシュ指示)は、CDNにより扱いが異なります。

設定の優先度

どちらを優先するかにより、キャッシュの振る舞いが変わります。それぞれにユースケースが存在しますが、CDNによっては片方の優先度しか取れません:

  • オリジンサーバのcache-control > CDNへのTTL設定
    • ユースケース
      • CDNで全体的なTTLを設定し、特定のページのみno-cache等でキャッシュさせない
  • CDNへのTTL設定 > オリジンサーバのcache-control
    • ユースケース
      • WordPressのようなすべてのphpページに対しno-cacheを発行するCMSにおいて、no-cacheを無視する(phpをキャッシュさせる)

対応

オリジンサーバのcache-controlをCDNで解釈する際にも、RFCに完全に準拠していない場合があります。