活用マニュアル

コンテンツキャッシュを作成してWebサーバーの負荷を下げたい

コンテンツキャッシュは高速なキャッシュサーバーの機能を提供するサービスです。
Webサーバーにはあらかじめ用意してある画像などの静的なコンテンツがいくつかあると思います。この画像へのアクセスについては、Webサーバーが応答を返してコンテンツを渡すだけですので、画像のデータを高速なキャッシュサーバーに置いて、応答をキャッシュサーバーからにすることにより、Webサーバー側は応答処理をする必要がなくなり、その分負荷を下げながら高速なレスポンスを得ることができます。

コンテンツキャッシュを含めた形で構築するには、キャッシュしたコンテンツをコンテンツキャッシュから読み出すように指定する必要があります。IDCFクラウドのオブジェクトストレージを使用してキャッシュ連携させる方法もありますが、今回は独自ドメインを取得したWebサーバーにオリジナルのファイルを置いて、コンテンツキャッシュにキャッシュさせる形で構築します。

本マニュアルの中で一部Webサーバーを「オリジンサーバー」、コンテンツキャッシュを「キャッシュサーバー」と記載しています。
またDNSの設定を行いますので、独自ドメインを取得している前提で記載しております。

1. Webサーバー(オリジンサーバー)の作成と設定

Webサーバー (オリジンサーバー)の作成は、活用マニュアル「Webサイトの本番環境を構築したい(Web1台構成)」(1)仮想マシンの作成を完了した状態からの始めます。
今回は画像をキャッシュさせる目的で構築しますので、画像ディレクトリを作成し、そのディレクトリのルールにキャッシュヘッダ情報を追加します。
 
 
①     Web公開領域にImgディレクトリを作成し、ディレクトリができた事を確認します。
[root@web01 ~]# mkdir /var/www/html/img
[root@web01 ~]# ls -ld /var/www/html/img
drwxr-xr-x 2 root root 4096 11月 23 13:28 2015 /var/www/html/img
							
②     テスト用のインデックスファイルを作成し、ファイルができたことを確認します。
[root@web01 ~]# echo "test" > /var/www/html/img/index.html
[root@web01 ~]# ls -l /var/www/html/img/index.html
-rw-r--r-- 1 root root 5 11月 23 13:38 2015 /var/www/html/img/index.html
							
③     curlコマンドでヘッダ情報を確認し、「Cache-Control」の情報が無いことを確認します。
[root@web01 ~]# curl --head http://IPアドレス/img/
HTTP/1.1 200 OK
Date: Mon, 23 Nov 2015 04:43:52 GMT
Server: Apache
Last-Modified: Mon, 23 Nov 2015 04:38:03 GMT
ETag: "5-5252dca67197c"
Accept-Ranges: bytes
Content-Length: 5
Connection: close
Content-Type: text/html

[root@web01 ~]# 
							
④     apacheのコンフィグファイルを作成し、ヘッダ情報を追加します。
[root@web01 ~]# cat >> /etc/httpd/conf.d/cache.conf << EOF

 Header always set Cache-Control "public"

EOF

[root@web01 ~]#
							
⑤     コンフィグチェックを行い設定を反映します。
[root@web01 ~]# apachectl configtest
Syntax OK
[root@web01 ~]# service httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]
							
⑥     curlコマンドでヘッダ情報を確認し、「Cache-Control」の情報があることを確認します。
[root@web01 ~]# curl --head http://IPアドレス/img/
HTTP/1.1 200 OK
Date: Mon, 23 Nov 2015 05:01:12 GMT
Server: Apache
Cache-Control: public
Last-Modified: Mon, 23 Nov 2015 04:38:03 GMT
ETag: "5-5252dca67197c"
Accept-Ranges: bytes
Content-Length: 5
Connection: close
Content-Type: text/html

[root@web01 ~]#
							
⑦     キャッシュ指定ディレクトリに画像ファイルをアップロードします。
ここではwinscpを使用して説明します。
ホスト名に「IPアドレス」を記入します。ユーザー名に「root」を記入し、「設定」をクリックします。
 
 
⑧     高度なサイトの設定画面で左メニューより「SSH-認証」をクリックします。認証条件の秘密鍵にsshログインする際の秘密鍵を選択します。

 
⑨     秘密鍵をPuTTY形式の鍵に変換するか確認のウィンドウが表示されますので、OKをクリックします。
(その後、noticeの画面が表示される場合がありますがOKをクリックします。)
 

 
 
⑩     ⑧の工程を再度実施します。鍵に今回作成したPuTTY形式の鍵を選択して「OK」をクリックします。 
 
⑪     ログインをクリックします。(初回アクセスの場合、警告の画面が表示されますが、「はい」をクリックします。)
 
 
⑫     左側にローカル、右側にサーバーのディレクトリが表示されます(通常インストールの場合)。右側のサーバーから「/root」のディレクトリ表示をダブルクリックします。
 
 
⑬     「ディレクトリを開く」テキストボックスに、①で設定したキャッシュさせるimgディレクトリ「/var/www/html/img」を入力し、「開く」をクリックします。
 
 
⑭     アップロードしたいファイルを右側サーバーの部分にドラッグアンドドロップしてアップロードします。アップロードできたら×を押してウィンドウを閉じます。
(終了してもよいか確認のウィンドウが上がりますのでOKをクリックします。)
 

 
⑮     サーバー上でアップロードできていることを確認します。
(本マニュアルではMORIO.jpgというファイルをアップロードしました。以降、MORIO.jpgという部分は自身のアップロードしたファイルと読み替えてください。)
[root@web01 ~]# ls -l /var/www/html/img/

合計 16
-rw-r--r-- 1 root root 12097 11月 20 21:52 2015 MORIO.jpg 
-rw-r--r-- 1 root root     5 11月 23 13:38 2015 index.html
							
⑯     アップロードしたファイルに対してHTTPのヘッダ情報を確認し、Cache-Controlのヘッダ情報が付与されていることを確認します。
[root@web01 ~]# curl --head http://IPアドレス/img/MORIO.jpg
HTTP/1.1 200 OK
Date: Mon, 23 Nov 2015 06:45:48 GMT
Server: Apache
Cache-Control: public
Last-Modified: Fri, 20 Nov 2015 12:52:35 GMT
ETag: "2f41-524f85976cac0"
Accept-Ranges: bytes
Content-Length: 12097
Connection: close
Content-Type: image/jpeg
							
 以上でWebサーバー(オリジンサーバー)側の作業は完了です。次にDNSを設定して独自ドメインでレコードの指定を行います。


2. DNSの設定

コンテンツキャッシュを独自ドメインで使用するためには、IDCFクラウドが提供するキャッシュサーバーを独自ドメインで解決できるように、CNAMEレコードを追加する必要があります。
今回は(1)で作成したWebサーバー(オリジンサーバー)にAレコードを作成し、コンテンツキャッシュ用にCNAMEレコードを作成します。
 
①     「IDCF Cloud」のロゴマークをクリックしてトップ画面に戻り、グローバルセクションから「DNS」をクリックします。
(初回アクセスの場合、サービス規約に同意してサービスを申し込む画面になります。サービスに申し込むことでDNSのコントロールパネルを表示させることが可能となります。)
 
②     「DNSゾーン作成」をクリックしてゾーン作成画面を表示します。
(契約後の初回アクセスの場合、本画面は表示されずにDNSゾーン作成画面が直接表示される場合があります。)

 
 
③     DNSゾーン作成画面で次のように設定して「作成する」をクリックします。
項目 設定内容
ゾーン名 独自ドメイン名
テンプレート 選択なし
メールアドレス 管理者のメールアドレスを指定
TTL初期値 600
説明 任意にゾーンの説明を追加
 
④     確認画面が表示されますので[はい]をクリックしてDNSゾーンを新規に作成します。
 
⑤     DNSゾーン一覧に作成したDNSゾーンが追加されます。

 
⑥     作成したDNSゾーン名をクリックしてレコード設定画面を表示します。
 
⑦     ゾーンは登録しただけでは利用できるようになりません。DNSサービスに認証させる必要があります。[認証する]をクリックして認証の登録を行います。
 
 
⑧     認証方法は2種類ありますが、今回は新しいDNSゾーンの場合を説明します。Whois情報に指定するネームサーバー情報の1行目~4行目までを指定の内容でレジストラへ登録します。
登録したら時間を置いて[認証する]をクリックして認証の確認を行います。(確認画面で[はい]をクリックします。)※1時間~最大で1日程度かかる場合があります。
 
 
⑨     認証処理が成功し、DNSゾーン登録が完了すると、認証結果画面でその後の作業指示が出ます。(失敗した場合は再度認証するように認証ボタンが表示されます。)
レジストラのネームサーバー情報から認証のために設定したレコードを削除します。内容を確認したら[閉じる]をクリックして画面を閉じます。
 
 
⑩     次にオリジンサーバーとキャッシュサーバーのレコードを登録するため、レコード設定画面で[+レコード登録]をクリックします。
 
 
⑪     先ず、オリジンサーバーを登録します。必要な内容を記入して[登録する]をクリックします。(確認メッセージが出るので、[はい]をクリックします。)
項目 設定内容
レコード名 任意(ここではwwwを指定)
タイプ A
Web01のグローバルIPアドレス
TTL 600
 
⑫     同じように[+レコード登録]からレコード登録画面を表示して、キャッシュサーバー(cdn001.idcfcloud.com)を登録します。
必要な内容を記入して[登録する]をクリックします。(確認メッセージが出るので、[はい]をクリックします。)
項目 設定内容
レコード名 任意(ここではcacheを指定)
タイプ CNAME
cdn001.idcfcloud.com
TTL 600
 
⑬     追加されたレコードに間違いがないか確認します。
 
 
⑭     DNS反映の時間(10分~1時間程度)を待って、コマンド(今回はhostコマンド)でDNSが反映されたことを確認します。
[root@web01 ~]# host www.ドメイン名

www.ドメイン名 has address IPアドレスこと
[root@web01 ~]# host cache.ドメイン名
cache.ドメイン名 is an alias for cdn001.idcfcloud.com.
cdn001.idcfcloud.com is an alias for idcf.g.yimg.jp.
idcf.g.yimg.jp has address キャッシュサーバーのIPアドレス(可変)
							
⑮     次に、Webサーバーにドメイン名でブラウザからアクセスをして表示できることを確認します。
(IDCFクラウド上からコマンド実行をした場合、IDCフロンティアのDNSサーバーに問合せに行くため、解決が早くなります。できる限りローカル環境にて、ブラウザ確認ができてから作業を進めるようにしてください。)
 
 
以上でDNSの設定は完了です。次にコンテンツキャッシュを設定して独自ドメインでキャッシュさせるように指定を行います。
 

3. コンテンツキャッシュの設定

 コンテンツキャッシュの設定を行います。DNSで設定を行っていれば、あとはコントロールパネルだけで設定が完結します。

※コンテンツキャッシュについての詳細やキャッシュ時間の調整などは、「コンテンツキャッシュスタートアップガイド」を参照してください。

 
①     「IDCF Cloud」のロゴマークをクリックしてトップ画面に戻り、グローバルセクションから「コンテンツキャッシュ」をクリックします。
(初回アクセスの場合、サービス規約に同意してサービスを申し込む画面になります。サービスに申し込むことでコンテンツキャッシュのコントロールパネルを表示させることが可能となります。)
 
②     キャッシュサーバー一覧画面にて「新規登録」をクリックします。

 
③     キャッシュサーバーの欄に必要事項を記入します。
項目 設定内容
利用ドメイン 独自ドメイン
通信プロトコル HTTP
利用キャッシュサーバー名 CNAMEレコードで指定したドメイン名(ここではcache.ドメイン名)
ディレクトリ名 作成したキャッシュ領域(ここでは/img/)
有効化希望日時 指定なし
 
④     次にオリジンサーバーの必要事項を記入して[確認画面へ]をクリックします。
項目 設定内容
利用ドメイン 独自ドメイン
通信プロトコル HTTP
利用キャッシュサーバー名 CNAMEレコードで指定したドメイン名(ここではcache.ドメイン名)
ディレクトリ名 作成したキャッシュ領域(ここでは/img/)
有効化希望日時 指定なし


 
⑤     入力内容確認画面で内容を確認し、[キャッシュサーバーを作成]をクリックします。

 
⑥     登録完了のメッセージが出るので×で閉じ、キャッシュサーバー一覧画面に戻ります。
 
⑦     ブラウザでキャッシュサーバーにアクセスしてみて表示されることを確認します。(表示されない場合は少し待ってから再度アクセスしてみてください)10回程度ブラウザの更新をかけて表示されることを確認します。(ブラウザキャッシュにならないように、更新をかけます)

 
⑧     HTTPのヘッダにてキャッシュされているか確認します。キャッシュされていない場合、cMsSfと表示されます。キャッシュされている場合、cHsfと表示されます。
※キャッシュサーバーは複数台で分散されているため、キャッシュされていないサーバーが見受けられる場合があります。その場合は数回同じコマンドを打ってcHsfが表示されるサーバーがあることを確認します。
[root@web01 ~]# curl --head http://cache.ドメイン名.info/img/MORIO.jpg
HTTP/1.1 200 OK
Date: Mon, 23 Nov 2015 13:48:46 GMT
Server: ATS
Cache-Control: public
Last-Modified: Fri, 20 Nov 2015 12:52:35 GMT
ETag: "2f41-524f85976cac0"
Accept-Ranges: bytes
Content-Length: 12097
Content-Type: image/jpeg
Age: 365
Connection: keep-alive
Via: http/1.1 cdn2005.idcf.djm.yahoo.co.jp (ATS [cHs f ])
[root@haproxy ~]#
							
⑨     最後にコントロールパネルでもキャッシュされているか確認します。キャッシュサーバー一覧画面から対象のキャッシュサーバーをクリックします。
 

 

⑩     キャッシュサーバー詳細メニューが表示されます。[キャッシュ確認]をクリックします。
 
 
⑪     アップロードした画像ファイル名を記入して[確認する]をクリックします。

 
⑫     結果欄に「キャッシュサーバーに指定されたコンテンツがキャッシュされています」と表示されていることを確認します。
 
 
これでコンテンツキャッシュを利用してWebサーバーの負荷を軽減させることができるようになりました。
 
たとえば、キャッシュサーバーから画像ファイルをWebページ内に表示させたい場合は、キャッシュサーバーのパス(今回の場合cache.ドメイン名)で画像ファイルを指定することで、Webサーバーではなく、キャッシュサーバーにアクセスを向けることが可能となり、アクセス負荷を軽減させることや、ユーザーへの高速なレスポンスが可能となります。
 
完全にキャッシュされた状態でWebサーバーのアクセスログ(/var/log/httpd/access.log)を確認すると、ブラウザで表示してもWebサーバー側にアクセスが来ていないことが確認できます。アクセスログを取得できなくなることは留意しておく必要があります。
コンテンツ更新時にはキャッシュされるまでの間、古いコンテンツが表示されてしまうため、キャッシュをコントロールパネルから削除したり、max-ageを指定してコンテンツのキャッシュ時間を短くするなど、あらかじめ運用方法を決めておくことをおすすめします。
 
コンテンツキャッシュのFAQサイトに、よくあるご質問をまとめていますので参考にしてください。

 

コラム: HTTPSを使用したコンテンツキャッシュ

本マニュアルでは、HTTPを使用してキャッシュサーバーを作成しました。SSL証明書を用意すれば、自分のドメイン名でHTTPSでの通信も可能となります。ここでは(3)コンテンツキャッシュの設定の例を用いて、HTTPSでの設定方法について記載します。

 
キャッシュサーバーの新規登録画面を表示します。※ (3)コンテンツキャッシュの設定②参照
キャッシュサーバーの登録画面で通信プロトコルにHTTPSを選択します。SSL証明書を用意してあるドメイン名(CNAMEレコード登録済み)を利用キャッシュサーバーに指定します。それ以外の部分は(3)コンテンツキャッシュの設定③~⑥と同様にして進めます。
 
 
キャッシュサーバー一覧画面にてステータスがSSL Waitingになっていることを確認し、対象のキャッシュサーバー名をクリックします。
 
 
メニューよりサーバー証明書をクリックします。
 
⑤必要事項を記入します。SSL証明書名にはドメイン名、SSL秘密キーは証明書発行時に使用した秘密鍵、中間証明書はベンダーから提供されているものを入力します。(中間証明書が2つある場合は順番に重ねて記載します。)最後に[入力内容を確認]をクリックし、確認画面で[サーバー証明書をインポート]をクリックします。
 
キャッシュサーバー一覧の画面で対象サーバーのステータスがEnableに変わったことを確認します。(Enableにならなければキャッシュは始まらないので、必ずEnableになることを確認してください。)
 
実際にブラウザを使ってhttpsでアクセスして確認をします。SSL証明書が問題なくインストールされブラウザ上で表示されます。
 
SSL証明書についても同様の手順でコントロールパネル上で更新することができます。
 

このページの先頭へ このページの先頭へ