Varnishでコンテンツをキャッシュして高速化
高速なリバースプロキシであるVarnishを導入してWebアプリケーションの高速化を図ります。
インストール
Ubuntu 10.04であればaptでインストール可能です。
sudo aptitude install varnish
daemontoolsで管理するのであれば以下のようにします。
sudo service varnish stopsudo update-rc.d -f varnish removecd /etc/servicesudo mkdir varnishsudo vi varnish/runchmod +x varnish/run
#!/bin/shexec /usr/sbin/varnishd \ -F \ # フォアグラウンドで動作 -a :6081 \ # 待ち受けポート -T localhost:6082 \ # 管理用ポート -f /etc/varnish/config.vcl \ # 設定ファイル -S /etc/varnish/secret \ # 管理ポートの認証ファイル -s file,/var/lib/varnish/cache.bin,10M # データの保存先とサイズ
設定
Varnishの設定はVCL(Varnish Configuration Language)というDSLで記述します。
sudo vi /etc/varnish/config.vcl
// バックエンドの設定backend app { .host = "127.0.0.1"; .port = "9000"; .connect_timeout = 30s;}
// リクエスト開始時に呼ばれる// どのように処理を行うかを記述するsub vcl_recv { // app に処理を行わせる set req.backend = app; // キャッシュを利用する return (lookup);}
// backendからデータを取得できたときに呼ばれるsub vcl_fetch { // データの有効期限を1日に設定する set beresp.ttl = 86400s;}
// データを識別するための値を計算するときに呼ばれるsub vcl_hash { // 携帯電話とPCで違うページを表示させる例 // リクエストのURI set req.hash += req.url; if (req.http.User-Agent ~ "DoCoMo|KDDI|SoftBank|Vodafone") { // 携帯電話からのアクセスの場合、末尾にmobileを加える set req.hash += "mobile"; } else { // PCからのアクセスの場合、末尾にpcを加える set req.hash += "pc"; }}
管理ツールの利用
専用のvarnishadmコマンドかtelnetを利用すると管理用ポートに接続して処理を行うことができます。ただ、telnetを使う場合は認証を無効にしないと面倒なのでvarnishadmコマンドを使うのが現実的だと思います。
sudo varnishadm -T localhost:6082 -S /etc/varnish/secret
purge.url ^/quit