share facebook facebook twitter menu hatena pocket slack

2011.04.07 THU

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

鈴木 宏康

WRITTEN BY 鈴木 宏康

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

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら

鈴木 宏康

鈴木 宏康

愛知県生まれ。東京工業大学大学院修士課程修了。在学時より、ベンチャー企業でインターネットに関する業務に携わり、現在はクラウド(主にAmazon Web Services)上での開発・運用を軸とした事業の、業務の中心として活躍。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。