monoの開発ブログ

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