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にリダイレクトされるようにしています。