CDNトラブルシュート(CDNが外れる)


CDNを使っているにもかかわらず、オリジンサイトへ誘導される(ユーザのリクエストがオリジンサーバに向かう)ことがあります。これは、以下の二つの理由により発生します:

  • HTTPヘッダにオリジンサーバのFQDNが含まれる
    • Location
    • Refresh
  • ページにオリジンサーバのFQDNが含まれる
    • CMSによる自動生成
    • Metaタグ

HTTPヘッダ

以下のようなHTTPヘッダにFQDNが含まれます。ただし、最近のCDNは、このようなHTTPヘッダを自動的に書き換える(Nginx Proxy_redirect設定に相当する動作を行う )ため、問題となることは少なくなっています。

一方、CDNが自動書き換えを行わない場合、オリジンサーバで書き換える必要があります。Apacheであれば、mod_headersを使用し、以下のような設定を行います:

  • Header edit Location www-orig\.example\.jp www.example.jp

Locationヘッダ

これはHTTPリダイレクトを行ったときに、リダイレクト先のURLをブラウザに通知するために使用されます。

  • サンプルレスポンス
    • content-length:202
      content-type:text/html; charset=iso-8859-1
      date:Fri, 01 Apr 2016 05:25:52 GMT
      location:https://tech.jstream.jp/blog/
      status:301

そして、デフォルト設定の(明示的なリダイレクト設定をしていない)Webサーバでも、以下のような場合においてリダイレクトが発生します。

  • Trailing Slash (トレイリング・スラッシュ)が無いURL
    • 例えば、https://www.example.jp/fooへアクセスすると、多くの場合、https://www-orig.example.jp/foo/へリダイレクトされます。

Refreshヘッダ

これは、ブラウザに指定したURLにジャンプさせるために使用されます。

サンプルレスポンス

  • content-length:202
    content-type:text/html; charset=iso-8859-1
    date:Fri, 01 Apr 2016 05:25:52 GMT
    Referesh: 10; url=https://www-orig.example.jp/
    status:200

これについては、明示的な設定により生成されます(デフォルトでは発生しません)。

ページに含まれるオリジンサーバのFQDN

オリジンサイトによっては、ページ内部にオリジンサーバのFQDNを含むことがあります。一方、CDNは、ページ内部の変更を行いません。そのため、オリジンWebサーバ上で書き換えを行う必要があります。Apacheであれば、SUBSTITUTEなどを使い、以下のような設定で可能です:

  • AddOutputFilter SUBSTITUTE .php .xml
    SUBSTITUTE “s|https%3A%2F%2Fwww-orig.examle.jp|https%3A%2F%2Fwww.example.jp|n”
    SUBSTITUTE “s|https://www-orig.example.jp|https://www.exampe.jp|n”

CMSが生成するリンク

WordPressのようなCMSでは、記事へのリンクをホスト名を含んだフルリンクで生成します。例えば、Wordpressの基本設定で以下のように指定した場合

  • WordPressアドレス(URL):https://www-orig.example.jp

WordPressは、すべてのページへのリンクを、このFQDN(www-orig.examplejp)を含む形で、生成します。そのため、ページを移動しようとした時に、オリジンサイトに飛ばされてしまいます。

Metaタグ

以下のようなMetaタグはFQDNを含みます。

  • Refresh
    • HTTP Rereshヘッダのmetaによる実装
      • <meta http-equiv=”refresh” content=”10;url=https://www-orig.example.jp/”>