OPEN SOURCE LABORATORY

投稿日:2010年3月23日 -投稿者 S.M.

Varnishを動かしてみた 設定編

前回から随分と日が経ってしまいましたが、
今回はvarnishの設定について書きたいと思います。

前回は基本的な構成で動作するところまで進めましたが、
バックエンドサーバから見るアクセス元のIPがvarnishサーバになるため、
アクセスログのIPが全てvarnishサーバのIPになってしまう。
「webが2台構成の場合どうすんの?」といった実際の運用で躓きそうな点を調べてみました。

まずは、IPアドレスの問題。

PHPの場合、アクセス元IPは$_SERVER["REMOTE_ADDR"]で取得しますが、
前述のとおり、$_SERVER["REMOTE_ADDR"]にはvarnishサーバのIPが入っています。

これを何とかしてリモートIPを取得するには、VCLのvcl_recvに以下の記述を追加します。

# Add a unique header containing the client addressremove req.http.X-Forwarded-For;set    req.http.X-Forwarded-For = client.ip;

こうすることで本来$_SERVER["REMOTE_ADDR"]に入るはずデータが$_SERVER["HTTP_X_FORWARDED_FOR"]で取得できるようになります。

次にWebサーバが複数台構成の場合。

varnishはデフォルトでロードバランシングする機能が備わっているので、この機能を利用します。
なお、バージョン2.0.5で試したところ、正常な設定でもVCLファイルがシンタックスエラーになる問題が発生しました。バージョンを2.0.6にあげると問題が解消されたので、同じような現象に遭遇した場合は最新版にアップデートすることをお勧めします。

さて、ロードバランシングの設定ですが、これもvclに設定を追加するだけです。
以下のように書いてみましょう。

director www_director round-robin {
    { .backend = { .host = “www1.example.com”; .port = “http”; } }
    { .backend = { .host = “www2.example.com”; .port = “http”; } }
}

sub vcl_recvに以下の記述を追加。

  if (req.http.host ~ “^www.example.com$”) {
    set req.backend = www_director;
  }

これで、「www.example.com」にアクセスがあった場合、
「www1.example.com」「www2.example.com」のどちらかに転送されるようになります。

なお、director宣言の「round-robin」部分ですが、「round-robin」と「random」のどちらかを記述する必要があります。環境に応じて適宜変更しましょう。

Read the rest of this entry »

投稿日:2010年1月20日 -投稿者 S.M.

Varnishを動かしてみた 導入編

リバースプロキシといえばSquidが有名ですが、
今回はリバースプロキシ専用のvarnishを動かしてみました。

ちなみにwikipediaによるとvarnishはSquidより10~20倍速いらしいです。

早速インストールしてみます。
今回使用した環境は「CentOS5.2」。
CentOSならRPMが公開されているので、インストールが簡単です。

ちなみに2010年1月20日現在の最新バージョンは2.0.6ですが、
残念ながらRPM版は2.0.5だったので、今回は2.0.5で検証しました。

wget http://download.fedora.redhat.com/pub/epel/5/i386/varnish-2.0.5-1.el5.i386.rpmwget http://download.fedora.redhat.com/pub/epel/5/i386/varnish-libs-2.0.5-1.el5.i386.rpmrpm -i varnish-libs-2.0.5-1.el5.i386.rpm  varnish-2.0.5-1.el5.i386.rpm

インストールはこれだけで終了です。

次に設定ファイルを変更します。
このとき、変更するのは「/etc/sysconfig/varnish」と「/etc/varnish/default.vcl」の2つ。

「/etc/sysconfig/varnish」はvarnish起動時に読み込まれる設定で起動時のオプション等を設定します。
今回はインストールした際に出来るサンプルをそのまま使用することにしました。

Read the rest of this entry »