Mar
21
2010

複数ドメインの設置

14:14 pm

単一のサーバで複数のドメイン名を使うには、Apacheの特徴的な機能の1つである「バーチャルホスト」を使えば実現できるとのこと。

バーチャルホストによる複数サイトの同時運用に方法が記載されています。
こちらの知っておきたいApacheの基礎知識も参考になります。

コラム:異なるドメインのホスト

 異なるドメインのホストが同じサーバを指すことなどできるのか、と思う方もいるだろう。それどころか、本稿では同じIPアドレスを指そうとしている。

 これは、一見信じられないことだが、実は簡単に実現できる。本文でも述べたとおり、URLを使ったアクセスでは、まずドメインのDNSへ問い合わせが行われる。このとき、そのDNSが返すIPアドレスは何であってもWebブラウザは信用するしかない。つまり、ほかのドメインで使われているIPアドレスであっても信じるのである。従って、「www.atmarkit.com」と「www.atmarkit.co.jp」で同じIPアドレスが返ってきても問題はない。あとは、アクセスを受けたWebサーバ側の問題となる。

 独自ドメインのURLが使えるのが売りのプロバイダは、バーチャルホストを使って複数のドメインを1台のサーバで運用している。それどころか、DNSサーバすらも複数のドメインを1台のサーバで賄っているのだ。

名前ベースのバーチャルホストバーチャルホストの例を参考にしました。

以下は、名前ベースのバーチャルホストから引用
たとえば、www.domain.tld を動かしていて、 さらにバーチャルホスト www.otherdomain.tld を追加するとしましょう。このバーチャルホストは同一 IP を指しているとします。 そのような場合は、httpd.conf に以下のようなコードを追加するだけです

NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.domain.tld
ServerAlias domain.tld *.domain.tld
DocumentRoot /www/domain
</VirtualHost>
<VirtualHost *:80>
ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain
</VirtualHost>

NameVirtualHost 及び VirtualHost のどちらの場合も、 * の部分には明示的に IP アドレスを指定することができます。 例えば、ある IP アドレスでは名前ベースのバーチャルホストを使いたい一方で、 別の IP アドレスでは、他の IP ベースのバーチャルホストや 別組の名前ベースのバーチャルホストを使いたい場合、 そう設定することになるでしょう。

複数の名前でサーバアクセスができるようにしたいことも多いでしょう。 このようなことは、ServerAlias ディレクティブを セクションに記述することで実現できます。 例えば上記の の例であれば、 次のように一覧に挙げられた名前が、 ユーザが同一のウェブサイトとして目にして使用できるサーバ名である、 と ServerAlias ディレクティブで指定できます。

ServerAlias domain.tld *.domain.tld 

domain.tld ドメインへの全てのホストへのリクエストは www.domain.tld のバーチャルホストが処理します。 名前をマッチさせるために、ワイルドカード文字 * や ? を使用することもできます。もちろん思いつきの名前を作って、 ServerName や ServerAlias にその名前を書くといったことはできません。まずは、 これらの名前が サーバに付けられた IP アドレスにマップされるように DNS サーバを適切に設定しなければなりません。

最後に、 コンテナの中に 他のディレクティブを書くことで、バーチャルホストの設定を細かく調整 することができます。 ほとんどのディレクティブはこれらのコンテナに設置することができて、 変更点はそのバーチャルホストに対してのみ有効になります。 どのディレクティブを書くことができるかは、ディレクティブの コンテキスト を 調べてください。主サーバコンテキスト ( コンテナの外) の設定用ディレクティブはバーチャルホストでの設定で 上書きされない場合のみ使用されます。

リクエストが来ると、サーバはまず最初に にマッチする IP アドレスかどうかをチェックします。マッチすれば マッチした IP アドレスの のそれぞれのセクションの中から ServerName か ServerAlias に要求されたホスト名があるか探します。 見つかればそのサーバ用の設定を使います。マッチするバーチャルホスト が見つからなければ、マッチした IP アドレスの リストの最初にあるバーチャルホスト が使われます。

結果として、リストの最初のバーチャルホストが デフォルト の バーチャルホストになります。IP アドレスが NameVirtualHost ディレクティブにマッチした場合は、メインのサーバ の DocumentRoot は決して使われません どのバーチャルホストにもマッチしないリクエストに対して、 特別な設定をしたいのであれば、設定ファイル中の最初の コンテナにそれを記述してください。

結局、以上を参考にして、以下のとおり構築しました。

$ sudo mkdir /home/www
$ sudp mkdir /var/log/www
$ sudo mkdir /home/www/hubuntu.net
$ sudo mkdir /home/www/hbirds.homelinux.com

$ sudo nano /etc/apache2/sites-available/default で以下を追記
「NameVirtualHost *」があるとエラーが出てしまうので外しました。

<VirtualHost *:80>
DocumentRoot /home/www/hubuntu.net
ServerName hubuntu.net
ServerAlias *.hubuntu.net
ErrorLog /var/log/www/hubuntu.net-error_log
TransferLog /var/log/www/hubuntu.net-access_log
<Directory /home/www/hubuntu.net/>
 Options Indexes FollowSymLinks MultiViews
 AllowOverride All
 Order allow,deny
 allow from all
</Directory>
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /home/www/hbirds.homelinux.com
ServerName hbirds.homelinux.com
ErrorLog /var/log/www/hbirds.homelinux.com-error_log
TransferLog /var/log/www/hbirds.homelinux.com-access_log
<Directory /home/www/hbirds.homelinux.net/>
 Options Indexes FollowSymLinks MultiViews
 AllowOverride All
 Order allow,deny
 allow from all
</Directory>
</VirtualHost>

Apacheをリスタート
$ sudo /etc/init.d/apache2 restart

/etc/hosts を編集し、以下を挿入
192.168.0.4 hubuntu.net hbirds.homelinux.com

No Comments »

RSS feed for comments on this post. TrackBack URL

Leave a comment

You must be logged in to post a comment.

www.hbirds.net