2011年7月6日水曜日

ServersMan@VPS(debian-32bit)を好き勝手に設定 - その11 - httpでバーチャル ホスト

個人的なことで恐縮ですが、
最近新たにドメインを1つ取得し独自ドメインを2つ所有するに至りました。
最近はVPSが安くなっているのでServersMan@VPSをもう一台借りて
そちらで新しいドメインを運用するのがベターなのは百も承知ですが、
月額費用が馬鹿にならないですし、
管理面から言っても1台のVPSで運用するのがやっぱりいいのです。
といっても、2つのドメインから同じサーバにアクセスしても
大して面白くないので、
やっぱりそれぞれのドメインで内容に差をつけたいところです。
ネットサーバにはそんな機能がしっかり備わっています。

最初にDNSサーバです。
私はドメインのDNSサーバにはgodaddy.comのホスティングサービスを使っていて、
そのサブドメインの管理をVPSに委譲しています。
それは、設定ファイル"/etc/bind/named.conf"に

zone "<委譲するサブドメイン名>" {
type master;
file "/etc/bind/db.<委譲するサブドメイン名>.net";
};

を追加して、
実際のレコードは"/etc/bind/db.<委譲するサブドメイン名>.net"に
書き込んで置けばいいのですが、
ゾーンはいくつでも並べて書けるので
特に意識しなくてもマルチドメインを1つのDNSサーバで運用できます。

それからドメイン毎に別々に運用したいものとしてメールサーバがありますが、
私はメールはGoogle Appsで運用しており、
両ドメインともこちらにホスティングしてもらっているので
VPSでは未設定です。

最後にウェブサーバです。
ブラウザにURLを入力するとウェブサーバのIPアドレス宛てに、
フルパスでファイル(ディレクトリ)を指定したリクエストが出され、
一見ホスト名は消えてしまうのですが、
実はリクエストのhttpヘッダ内にHostヘッダがあり、
ここにホスト名がかかれていて、
サーバ側ではHostヘッダで判断してホスト名ごとのコンテンツを
送り返す仕様になっており、これがバーチャルホスト機能です。
ちなみにバーチャルホストにはIPベースと名前ベースの2種類があります。
前者は複数のIPアドレスをもつサーバで設定可能ですが、
私のVPSはServersMan@VPSのEntryプランで
もらえるIPアドレスは1つだけということで実現不可能です。
後者はFQDNをDNSで正引きできるようにしさえすればいくつでも設定可能ですが、
SSLなサイトは1つだけしか運用できません。
今回利用するのは後者です。

では設定方法をご紹介しましょう。
なお、以下の説明はVPSのウェブサーバが
すでにデフォルトのFQDNである"www.origin.com"で運用されており、
"www.new.com"のサイトを新たに運用するものとします。
最初に"new.com"ドメインの管理を委譲されているDNSサーバに

www.new.com. IN CNAME www.origin.com.

を追加します。
こればbindの記述方法ですので、
そのほかのサーバソフトではこれに相当する記述としてください。
ちなみにこの設定が反映されるには時間がかかる場合があります。
今度はウェブサーバの設定です。
設定ファイル"/etc/apache2/httpd.conf"の

ServerName www.origin.com

を削除します。
また、ファイル"/etc/apache2/sites-available/default"と
"/etc/apache2/sites-available/default-ssl"の

<VirtualHost *:80>

の直後に

ServerName www.origin.com

を追加します。
その後以下を実行します。

# cd /etc/apache2/sites-available/
# cp default www.new.com

作成したファイル"/etc/apache2/sites-available/www.new.com"の

ServerName www.origin.com
DocumentRoot /var/www/html



ServerName www.new.com
DocumentRoot /var/www.new.com/html

に変更し、www.new.com用のウェブコンテンツを
/var/www.new.com/htmlディレクトリに置きます。
また、Directoryディレクティブ等を整合するように修正してください。
最後に以下を実行して完了です。

# cd /etc/apache2/mods-enabled/
# ln -s ../sites-available/www.new.com 002-www.new.com
# /etc/init.d/apache2 restart

これで、"http://www.origin.com"と"http://www.new.com"で
アクセスしたときに表示されるページが異なっているはずです。
ちなみに、それ以外のCNAMEレコード設定済みFQDNを指定した場合は、
デフォルトの"http://www.origin.com"へのアクセスとみなされます。

ところで先にSSLのサイトはバーチャルホスト設定できないと書きましたが、
どうしてもSSL対応のサイトを複数運用したければ
マルチポートという手があります。
URLにポート番号を含めることになるのでかっこ悪いのですが、
通常コンテンツからSSL対応コンテンツへ導くような構成なら
あまり目立たずいいかもしれません。
設定ファイル"/etc/apache2/ports.conf"の

Listen 443

の直後に

Listen 444

を追加し、以下を実行します。

# cd /etc/apache2/sites-available/
# cp default-ssl www.new.com-ssl

作成したファイル"/etc/apache2/sites-available/www.new.com-ssl"の

ServerName www.origin.com:443
DocumentRoot /var/www/html



ServerName www.new.com:444
DocumentRoot /var/www.new.com/html

に変更し、以下を実行して完了です。

# cd /etc/apache2/mods-enabled/
# ln -s ../sites-available/www.new.com-ssl 003-www.new.com-ssl
# /etc/init.d/apache2 restart

これで、"https://www.origin.com"と"https://www.new.com:444"で
アクセスしたときに表示されるページが異なっているはずです。
残念ながらポート番号のみで判定されるので、
"https://www.origin.com"と"https://www.new.com"は同じ、
"https://www.origin.com:444"と"https://www.new.com:444"は同じとなります。
これで妥協できなければ、
グローバルIPアドレスが複数割り当てられるサービスを契約して
IPベースのバーチャルホストを構成しましょう。

0 件のコメント:

コメントを投稿