2011年3月25日金曜日

Varnishでリダイレクト専用Webサーバの構築

スズキです。

S3でWebサイトのホスティングをしても、独自ドメインを利用しようとすると、
DNSのCNAME設定の関係上、"www.suz-lab.com"などのDNS名しか利用できず、
"suz-lab.com"が宙ぶらりんな形になってしまいます。

できれば、"suz-lab.com"は"www.suz-lab.com"にリダイレクトして欲しいので、
リダイレクト専用のWebサーバをVarnishを利用して作ってみました。
(後でcloudpackのサービスとして公開しようと思っています)

仕様は、任意のDNS名でアクセスすると、
その DNS名の頭に"www."を付けたURLにリダイレクト
って感じになっています。

例えば、
"suz-lab.com"でアクセス → "www.suz-lab.com"にリダイレクト

"iret.co.jp"でアクセス → "www.iret.co.jp"にリダイレクト
となります。

リダイレクトサーバの動きとしては、
http://suz-lab.com/test.html
でアクセスされたら、レスポンスコード301で、
Locationヘッダに、
http://www.suz-lab.com/test.html
を設定してレスポンスを返す用にしています。

それでは、実際の構築についてです。

まずは、下記のようにインストール(epel)です。

# yum -y install varnish
# chkconfig varnish on

このまま立ち上げると、Listenポートが6081番になってしまうので、
80番になるように"/etc/sysconfig/varnish"を下記のように編集します。

--------【varnish】--------
...
DAEMON_OPTS=" \
-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-u varnish -g varnish \
-s file,/var/lib/varnish/varnish_storage.bin,1G \
"
...
--------
※"-a 6081"を"-a 80"としています。

そして、下記のようにVarnishをスタートするし、

# /etc/init.d/varnish start
Starting varnish HTTP accelerator:                         [  OK  ]

対象サーバにアクセスすると、下記のようなページが表示されるはずです。


Varnishが立ち上がったら、上述した振る舞いになるように、
"/etc/varnish/default.vcl"を下記のように編集します。

--------【default.vcl】--------
backend default {
    .host = "127.0.0.1";
    .port = "80";
}

sub vcl_recv {
    return (error);
}

sub vcl_error {
    set obj.http.Location = "http://www." req.http.host req.url;
    set obj.status = 301;
    return (deliver);
}
--------

これでVarnishをリスタートすれば、上記のリダイレクト処理を行うようになります。

実際、"iret"のサイトは、"www.iret.co.jp"をS3でWebサイトとして
ホスティングしてますが、その、iret.co.jpはDNSの設定で
上記のリダイレクトサーバIPアドレスを設定して、
"www.iret.co.jp"にリダイレクトされるようにしています。

VCLの情報が少ないなー...
--------
http://www.suz-lab.com

0 コメント: