情報科学屋さんを目指す人のメモ

方法・手順・解説を書き残すブログ。私と同じことを繰り返さずに済むように。

Cloudflare CDNでキャッシュされないファイルとWebサーバが落ちたときの挙動について

CloudFlare (9) Nginx (15)

Cloudflareは、ウェブサイトをCDN経由で配信できるようになるサービスで、このブログでも現在利用中です。

今年の前半に一度利用したのですが、そのとき発生した問題が解決できずに一度解除、その後、さくらのVPSのネットワーク帯域を上限まで使ってしまい、慌ててCloudflareを再設定して今に至っています。

Cloudflare利用当初勘違いしていた部分があり、後になって気が付いた点をここに書き留めておきます。Cloudflareの仕組みは簡単にしか説明しません。

Cloudflareの基本的な仕組み

Cloudflareを利用するためには、自分のドメインのネームサーバー設定を変更して、Cloudflareのネームサーバーを参照するように変更します。

またその一方で、CloudflareのDNS設定画面に、今まで利用していたネームサーバーに指定していたDNSレコードの設定を入力しておきます。

するとCloudflareは、サイトへのリクエストを世界中のリバースプロキシサーバへ誘導し、そのリバースプロキシ経由でオリジナルのウェブサーバーにアクセスするようにしてくれます。

そしてそのリバースプロキシは、オリジナルのサーバーから取得したデータを今後キャッシュとして保持してくれるため、2回目以降のアクセスではそのキャッシュを返してくれる分、オリジナルのウェブサーバーへのリクエスト数・帯域は大幅に削減される、という仕組みです。

Cloudflare CDN が巨大なリバースプロキシとして動作してくれるので(各サーバーはcloudflare-nginx)、わざわざ新しいファイルをCDN上に配置したり、もともと利用していたウェブサーバーの設定を変更する必要なく、CDNを利用できる、とても便利なサービスです。

裏側のサーバーが落ちたときは?

では、オリジナルのウェブサーバーが落ちたときはどうなるのか、と考えてみます。

リバースプロキシでキャッシュされているのだから、少なくともキャッシュが消されるまでは閲覧可能状態が残るのでは?と思うかも知れません。

これが実は勘違いで、裏側のサーバーが落ちると、普通にページは即閲覧不能になります

キャッシュするファイルは静的ファイルのみ(初期設定)

というのも実は、HTMLファイルは、キャッシュの対象外となっており、毎回オリジナルのサーバーに問い合わせる仕組み(設定)になっているのです。

キャッシュされるのは、画像やCSSなど、静的なファイルのみなので、裏側のサーバが落ちてしまうとHTMLの取得ができず、Cloudflareを使っていてもサイトは落ちてしまいます。

By default, CloudFlare's CDN  does not cache HTML content. HTML updates will show immediately. Only static content like Javascript, images and CSS would be cached by default. You can, however, create PageRules to cache things like static HTML. 引用元

  • css
  • js
  • jpg
  • jpeg
  • gif
  • ico
  • png
  • bmp
  • pict
  • csv
  • doc
  • pdf
  • pls
  • ppt
  • tif
  • tiff
  • eps
  • ejs
  • swf
  • midi
  • mid
  • ttf
  • eot
  • woff
  • otf
  • svg
  • svgz
  • webp
  • docx
  • xlsx/li>x
  • xls
  • pptx
  • ps
  • class
  • jar
  • woff2

このキャッシュされるファイルについての誤解は、影響がとても大きかったです。

これが不便かというと、実はここに選択肢があるのは便利で、ちゃんとウェブサーバーにリクエストが残ってくれるので、アクセスを分析するのに役立ってくれます。また、もともとCloudflareのアクセス先はこちらが用意したリバースプロキシ(Nginx)がキャッシュしているHTMLなので、負荷は問題になりません。

設定でHTMLもキャッシュできる

HTMLファイルもCloudflareにキャッシュして欲しい、という場合は、「Page Rules」という設定から指定できるので、そちらを使ってみてください。

↓この記事を先に見て、「例外ルール付けないとHTMLキャッシュされちゃうよ?管理画面は例外にしようね」みたいに思ってしまったので、ちゃんと更新されていることに気が付いて、「管理者だということが認識されている?」「WordPressだってことを認識して自動で例外設定している?」などといろいろ思ってしまいました。

ひとこと

Cloudflareの導入後、画像の読み込みは爆速となり、二度と帯域幅問題は起こらなそうになりました。

効果は絶大だ、です。

cloudflare-cdn-does-not-cache-html-content-by-default

コメント(0)

新しいコメントを投稿