[BLOG] CDNを適用させてみた。

CDNというのは、content delivery networkの略で、コンテンツ配信に最適化されたネットワークと言うものだそうで、平たく言えば「広域展開された巨大なリバースプロキシ」を意味するものと思ってます。

用途としては、

  • CDNにキャッシュさせて、自サイトのサーバ負荷を下げたい
  • 自サイトのサーバがダウンしても、キャッシュを参照させてWebサイトのダウンを避けたい
  • 自サイトのサーバに対する攻撃を何とか防ぎたい

などで使われることが多いようです。

blog_access_diagram_cdn_20170819a

ココ最近私、MastodonというSNSを使ってるのですが、こいつが厄介な仕様を抱えていて、Mastodonで例えば私のブログTipsをリンク張ったりすると、自分のフォロワーさんが所属するすべてのMastodonインスタンスからそのリンクに対してアクセスを試みるんです。その為、私はそれほどフォロワーさん居ない(100人弱)状況でも結構な数のアクセスがやってきて、我が家の貧弱なUTMやWebサーバのCPU負荷が高騰するんですね・・・Orz こんなログが大量に発生します。(およそ秒間90アクセスほど)

<ロードバランサのIP> - - [18/Aug/2017:22:58:57 +0900] 
"GET / HTTP/1.1" 200 35299 "-" 
"http.rb/2.2.2 (Mastodon/1.4.7; +http://<インスタンス名>/)"

リンクを連続で張ればその分どんどんアクセス来ますし、ブーストなんてされた日にはそりゃぁもう・・・というわけで、これを耐え忍ぶためにCDNを導入してみました。

残念ながら画面交えてなどの詳細説明は今回省くことにしました。参考URLとかは貼り付けてますので、そのあたりを見ながらやってみたい人はやってみてください。

今回導入したのはCloudFlareです。選定理由は「無償版があるから」です。現在お仕事休んでしまってるので財政的に厳しく、本音を言うとAWSのCloudFrontを使ってみたかったのですが・・・でも、結構利用している人は多くいらっしゃるので、これに決めてみました。

基本的な導入手順は「無料のCDN「CloudFlare」を導入する方法」を参考にしています。アカウント作って、既存権威DNSのNSレコードを指定されたものに変えるだけ・・・・だったはずなんですが、それなりにハマった所はあったので簡単にまとめておきます。

移行されるDNSレコードの突合は必ずすること

アカウント作成時、既存DNSのレコードをCloudFlare側が参照して、「それなり」に移行してくれて、その確認画面が表示されます。で、全てが綺麗に移行されているかというと、実は全然そんなことはありませんでした。MastodonインスタンスのA/AAAAレコードとか全然移行できてませんでしたし。

なので、レコードの移行確認については慎重に行いましょう。

Route 53で変えるべき箇所は2箇所

上記URLの手順では権威DNSのNSレコードさえ変えれば大丈夫とのことだったんですが、私が使っている権威DNSであるRoute 53の場合、Registered domains上のName Serverの設定も同じように修正する必要がありました。

このあたりは「How to configure Route 53 to Cloudflare」の記事で判明し、これに合わせて修正したところ、順次DNSが切り替わっていきました。

あと、Route 53ではデフォルトのNSレコードのTTLが2日(172,800sec)に設定されています。この値も短めの値に設定した上で、作業は取り組んだほうが良いように思いました。

CloudFlareのWordpressプラグインがある

CloudFlareを使うことを前提に、その連携をするためのWordpressプラグインがあります。プラグイン検索画面でCloudFlareと入力すれば見つかります。で、この時PHPのバージョンが古い(CentOS6を使ってると間違いなく該当する。確か5.3.3だったかな、これだと駄目です。)と、プラグインの有効化が行なえません。

今回、思い切ってPHPを5.6にバージョンアップしています。「CentOS6/CentOS7にPHP5.6/PHP7をyumでインストール」という記事を参考にしています。この記事では、インストールパッケージにphp-mysqlが抜けてますので、それを忘れずにー。

SSL証明書の発行は丸一日かかる

SSLサイトをCDNに適用することが、Free版でも可能です。その時は、CloudFlareが持つ証明書が適用されます。その発行に関してはどうやら24Hほどかかるみたいです。私の場合、Route 53のDNS切り替えに時間を要したため、あまり問題にならなかったですが、SSL証明書の発行が一通り完了するまで、対象サイトのCDNは有効にしないほうが良さそうです。

対象サイトをCDN適用するかどうかは、DNSレコードの設定で行います。対象レコードに対して、CDNを通すか、バイパスしてオリジンサーバへアクセスするかを選択することが可能です。

というわけで

何とかこのブログサイトをCDNに適用することが出来ました。Free版ではページルールが3つまでとか、WAFは備わってないとか、多少の制約はありますが、我が家の環境では取り敢えずWAFは下の階層で受け持ってるので取り敢えずはなんとか凌げるかなぁとも。上位プランのPro版でも月額20ドルなので、比較的個人でも現実的なコストで運用することが出来るのではないかなぁと思います。

実際の効果ですが、まだはっきりとはわかりませんが、レスポンスはだいぶ改善されたように思います。自宅のブログ環境のボトルネック、実はロードバランサでして、私が使ってる非商用検証用ライセンス(2万円也)では10Mbpsのトラフィック制限がかかっています。これによりレスポンス遅延が結構発生してたのですが、そこは結構さっくり応答してくれた・・・ような気がします(笑)

その他、結果の表示は6時間遅れになるのですが、Analytics画面も備わっており、どんなユーザがアクセスしたかがXG Firewallのログビューアよりは絶対見やすいだろうなぁと思いますし。まだまだ使いこなせないところが多いので、ぼちぼち触っていきたいと思います。