先日、WBS(ワールドビジネスサテライト)に僕が所属している会社が取材され、短い時間ですが放送の中で紹介されました。
沖縄県知事戦を関連した、沖縄県で注目のITベンチャー・スタートアップとしてPaykeが紹介され、時間としては大体2分間程度だったのですが、テレビ放送ということもあり会社サイトにアクセスが急増することを想定してAzure CDNを使って対策を行いました。(放送があることがわかったのは、放送日前日の午後3時...)
CDNとは世界中に分散しているエッジサーバー上でコンテンツをキャッシュし、オリジナルのサーバーへのアクセスが届く前にエッジサーバーでレスポンスを返すことにより負荷分散とレスポンスの高速化を行うためのサービスです。
AzureのCDNの特徴として、Microsoft、Akamai、Verizonが提供するCDNサービスが選択できます。 それぞれ特徴が違うので、自分たちの用途にあったサービスを選ぶことができます。
今回は静的コンテンツだけでなくサイト全体をCDNでキャッシュして配信したかったため、そのためにはCDN側でSSL解決を行う必要がありました。 独自証明書を使いたかったので、それが使える Azure CDN Standard from Microsoftを選択しました。
CDNに独自証明書をアップロードするときですが、書式をpki形式に変換しないといけません。
証明書のcerファイルを以下のコマンドを使ってpki形式に変換します。
$ openssl pkcs7 -in {common_name}.cer -outform PEM -out {common_name}.pem -print_certs
以下ページも参考にしてみてください。
すでに稼働しているドメインをCDNに向ける場合の注意点
たとえばwww.sample.comというサイトをCDN配信するためには、DNSの設定でwww.sample.comのCNAMEの向き先をCDNのドメインにする必要があります。 新しいサイトの場合は問題ないのですが、すでに稼働しているサイトの場合に使用しているドメインの向き先をいきなり切り替えると、CDN側に設定が反映されるまでのタイムラグの間サイトが表示されなくなってしまいます。
Azure CDNではそのようなケースのためにcdnverify サブドメインをマップすることでCDN側の設定を事前に反映させることができます。 こちらのドキュメントを参考に設定してみてください。
オリジンとなるサイトがWordPressの場合の注意点
WordPressの場合、サイトのドメインがデータベース登録されているため、そのドメイン以外からのアクセスだとリダイレクトがかかるケースがあります。
wordpressに登録しているサイトドメインはCDNを向き、CDNからは別のドメインをつかってオリジンサーバーへはアクセスすることになるため、wp-config.phpの中で以下のようなコードを入れて、意図しないリダイレクトが発生しないように調整しました。
if($_SERVER['HOST_NAME'] === 'origin.sample.com'){ $_SERVER['HOST_NAME'] = 'www.sample.com'; }
結果
通常時の100倍以上のユーザーがサイトに訪れましたが、なんのトラブルもなく正常にサーバー稼働し続けましたので、今回の対策は無事成功したと思います。
実は今回がはじめてのCDN利用だったのですが、静的コンテンツの大量のアクセス増にすばやく対応するのに、CDNはさいつよですね。