WordPressの高速化ために、httpアクセラレータの「Varnish Cache」導入

WordPressの高速化ために、httpアクセラレータの「Varnish Cache」導入

WordPressの高速化ために、httpアクセラレータのVarnish Cache導入 タイトルにもありますように、僕がブログで使用ているWordpressを少しでも速くするためにVarnish Cacheをインストールをしてみました。 こないだ、STINGERの作者のENJILOGさんのブログでも紹介されていた、「Photon」などのWordpressのプラグインを利用する手段もありますが、僕の本業はサーバエンジニアをしているので、プラグインには頼らずエンジニアらしい方法でサーバのパフォーマンスアップを試みてみます。 でも、比較するため近いうちに「Photon」も試してみたいと思います。 photo credit: moogs via photopin cc Varnishの概要を説明 Varnish は、Webアプリケーションアクセラレータです。これは、HTTPキャッシュのように機能するリバースプロキシです。 リバースプロキシの目的としては、コンテンツのキャッシュを介してサービスをスピードアップすることができるので、高トラフィックを持つWebアプリケーションやサービスにおいては、非常に便利なミドルウェアです。 図解で動きを説明すると、クライアントからhttpのリクエストをVarnishが受けてメモリ上にCache(キャッシュ)があれば、下の図のようにバックエンドのApacheには処理は渡しません。 もしリクエストを受けたVarnisがCacheに情報が無いときは、下の図のようにバックエンドのApacheに処理を渡しレスポンスを待ちます。 このようにサーバ全体において処理のオーバヘッドを減らすことができるので、非常に便利なミドルウェアだと思います。 Varnishをインストール 僕が利用しているサーバは「お名前.com」が提供しているVPSを利用しています。 サーバのスペックは以下の通りで、月額は1000円以下の費用ではあるので、スペックとしてはかなり低いです。 OS : CentOS release 6.4 HDD : 100GB MEM : 1GB CPU : 2cpu WEBサーバ : Apache/2.2.15 OSはCentOSを使用しているので、インストールは非常に簡単です。 # yum install varnish これだけです。 もし、インストールができないようであれば、EPELかREMIのリポジトリを使ってもらうとインストールができると思います。 Varnishの設定 Varnishの設定は非常に簡単です。 基本的にはこの2つのファイルを調整してもらえると使えるようになります。 “/etc/sysconfig/varnish” …主に待ち受けポートや、割当メモリサイズを設定します。 “/etc/varnish/default.vcl” …主にバックエンドのアパッチのポート番号を設定します。 ・varnishを編集します。 # vim /etc/sysconfig/varnish 最低限として以下の内容を編集すれば大丈夫です。 VARNISH_LISTEN_ADDRESS= ///お使いのIPアドレスを入れます。 VARNISH_LISTEN_PORT=80 ///webサービスで使っているポート番号。ほとんどは80だと思います。 VARNISH_STORAGE_SIZE=512M ///キャッシュをするメモリのサイズ。G(ギガバイト)の設定も可能 VARNISH_STORAGE=”malloc,${VARNISH_STORAGE_SIZE}” ///キャッシュをファイルにするか、メモリにするかを設定 ・default.vclを編集します。 # vim /etc/varnish/default.vcl backend default { .host = “127.0.0.1”; ///アパッチが動いているサーバのIPアドレス。今回の場合は同一サーバ上にアパッチがあるので、127.0.0.1 .port = “8080”; ///アパッチの待ち受けポート番号 } そしてデフォルトでは以下の行はコメントアウトされているので、解除します。 sub vcl_recv { if (req.restarts == 0) { if (req.http.x-forwarded-for) { set req.http.X-Forwarded-For = req.http.X-Forwarded-For “, ” client.ip; } else { set req.http.X-Forwarded-For = client.ip; } }