ハウツー:Apacheでバーチャルホストを設定する

 1台のウェブサーバ上で1つのサイトを運用するというのも十分に厄介な作業になり得るが、複数の顧客のために複数のサイトをホストする必要がある場合には下手に設定すると非常に厄介なことになる。Apacheを使用しているなら、バーチャルホストを設定することで作業を楽に行なうことができる。バーチャルホストを使用すれば、1つのIPアドレス上で複数のドメインを管理することができるようになり、「http://あなたのサイト.com/バーチャルホスト関連/顧客のディレクトリ/ファイル名.html」のようなURLではなく「http://顧客のドメイン.com/ファイル名.html」のようなURLで指定することが可能になり、「/srv/www/htdocs/バーチャルホスト関連/顧客のディレクトリ」といったファイル構成でドメイン転送の設定をせずに済ませることができるようになる。

 Apacheが正しくインストールされていれば、バーチャルホストの設定はApacheの設定ファイルを編集することで簡単に行なうことができる。/etc/apache2ディレクトリにはhttpd.conf、error.conf、server-tuning.confなど数多くの設定ファイルがある。これらのファイルは一般ユーザには読み取りのみ可の設定になっているため、ファイルを変更するためにはsudosuを使用してroot権限を得る必要がある。

 /etc/apache2/httpd.confを開いて以下のような行を見つけよう。

Include /etc/apache2/vhosts.d/*.conf

 上記の行を変更して、.confファイルを具体的に指定するようにする。ここでは、後ほど作成するvhost.confというファイルを指定する。

Include /etc/apache2/vhosts.d/vhost.conf

 変更が完了したら、ファイルを保存しよう。次に再びroot権限で、/vhosts.d/にあるvhost.templateファイルの名前を以下のように変更してvhost.confを作成する。

# mv vhost.template vhost.conf

 それではvhost.confファイルを編集して、1つのIPアドレス上で複数のウェブサイトを名前ベースのバーチャルホストで運用するように設定しよう。まず始めに、「NamevirtualHost *」としてバーチャルホスト用のディレクティブを追加する。なおアスタリスクはワイルドカード文字であり、すべてのアドレスを表わす。次に以下のようにして、NamevirtualHostディレクティブの下に1つめのバーチャルホストを追加しよう。

NamevirtualHost *
<VirtualHost *>
ServerAdmin youremail@yoursite.com
DocumentRoot /srv/www/htdocs/directory_of_your_choice/
ServerAlias yourdomain.com *.yourdomain.com
<virtualHost>

 最初の部分(<VirtualHost *>)は、バーチャルホストを定義するブロックを開始するためのタグだ。ServerAdminは、404などのエラーが起こった場合に管理者の電子メールアドレスを表示するための設定だ。DocumentRootは、定義するサイトのルートディレクトリで、例えば私の場合、これまでにホストしたサイトはすべて「/srv/www/htdocs/バーチャルホスト関連/サイト名/」の中に各サイト用のファイルを置くようにしていた。次はServerAliasまたはServerNameで、サイトを閲覧したりサイトにアクセスするために使用することができる名前を指定する。ServerAliasServerNameごとに異なるDocumentRootを指定することによって、それぞれのドメイン名に対応するそれぞれ異なるページを表示させることができる。上記でServerAliasに2つのエントリがある理由は、サーバが複数のServerNameで呼び出されることがしばしばあるからだ。そのような場合には、ServerAliasに複数のアドレスを設定しておくことができる。なおワイルドカードは、.yourdomain.comの前に何が指定されても良いようにするために使用している。

 それでは、(1つはサーバのメインのIPアドレス、もう1つはlocalhost(127.0.0.1)上に)複数のバーチャルホストを2つの異なるNameVirtualHostブロックを使って設定したい場合はどうなるだろうか。コードは以下のようになる。

NameVirtualHost *
<VirtualHost *>
ServerAdmin admin@mixfevers.com
DocumentRoot /srv/www/htdocs/
ServerAlias mixfevers.com *.mixfevers.com
</VirtualHost>

<VirtualHost *>
ServerAdmin admin@snapnshare.com
DocumentRoot /srv/www/htdocs/snapnshare/
ServerAlias snapnshare.com *.snapnshare.com
</VirtualHost>

<VirtualHost *>
ServerAdmin admin@boomerwebzine.com
DocumentRoot /srv/www/htdocs/~/boomer/
ServerAlias boomerwebzine.com *.boomerwebzine.com
</VirtualHost>

NameVirtualHost 127.0.0.1

<VirtualHost 127.0.0.1>
   DocumentRoot /srv/www/htdocs/
   ServerName localhost
</VirtualHost>

 変更を有効にするためには、設定ファイルを保存した後、Apacheをroot権限で再起動する必要がある。

# /etc/init.d/apache2 restart

 上記の設定は、1台のサーバ上で複数のサイトをホストする小企業や、ウェブサイトをデザインしてホストしたいホビイスト向けとしてうまく機能するだろう。特定のドメイン名に関するリクエストに対してどのページを表示したらいいのかを設定しているので、IPアドレスが静的な場合だけでなく動的な場合にもこの設定を使うことができる。

 なおApacheプロジェクトによって、様々なバーチャルホストの設定/管理についての文書が提供されている。

James Leesはウェブサイト開発者。ネットワークエンジニアリングとウェブ開発を学ぶために大学へ行きたいと考えている。一途なLinuxユーザ。

Linux.com 原文