9.21. バーチャルホストの設定

Apache Web サーバーは、バーチャルホスト機能をサポートしており、1 台の物理サーバーで容易に複数の仮想サイトの運営が可能です。Apache は、1 つの IP アドレスに複数のドメインを対応させるホストベースのバーチャルホストと、各ドメインに異なる IP アドレスを割り当てる IP ベースのバーチャルホストの両方をサポートしています。ここでは、これらのバーチャルホストの設定方法について解説します。

バーチャルホストの設定は、<VirtualHost> ディレクティブで行います。以下に、<VirtualHost> ディレクティブの書式を示します。

<VirtualHost addr[:port] [addr[:port]] ...>

 ...

</VirtualHost>

<VirtualHost addr[:port] [addr[:port]] ...> から </VirtualHost> の間で 1 つのバーチャルホストを定義します。addrport には、バーチャルホストがリクエストを待ち受ける IP アドレスとポート番号を指定します。

9.21.1. ホストベースのバーチャルホスト

一般的によく利用されるのは、このホストベースのバーチャルホストです。例として、次の 2 つの Web サイトを物理的に 1 台のサーバーで運用するために必要な最も基本的な設定について解説します。なお、DNS サーバーによる名前解決(別名定義)はすでに完了しているものとします。

実際の設定は、以下のようになります。このように仮想サイトごとに <VirtualHost> ディレクティブを設定します。

NameVirtualHost 172.16.0.3:80

<VirtualHost 172.16.0.3:80>
    ServerName   www.example.com
    ServerAdmin  webmaster@example.com
    DocumentRoot /var/www/html/example.com
    ErrorLog     /var/log/httpd/example.com_error_log
    TransferLog  /var/log/httpd/example.com_access_log
</VirtualHost>

<VirtualHost 172.16.0.3:80>
    ServerName   www.example.jp
    ServerAdmin  webmaster@example.jp
    DocumentRoot /var/www/html/example.jp
    ErrorLog     /var/log/httpd/example.jp_error_log
    TransferLog  /var/log/httpd/example.jp_access_log
</VirtualHost>

はじめに、NameVirtualHost ディレクティブに、これら 2 つの仮想サイトが共有する IP アドレスを指定します。ホストベースのバーチャルホストの場合、NameVirtualHost ディレクティブは必ず指定しなければなりません。この例では、172.16.0.3:80 としています。“*"を指定するとサーバーのすべてのIPアドレスになります。ポート番号がデフォルトの 80 の場合は省略することも可能です。

次に、<VirtualHost> ディレクティブで、各仮想サイトの設定を記述します。<VirtualHost> ディレクティブの値には、NameVirtualHost ディレクティブで指定した IP アドレスをそのまま記述します。これにより、IP アドレス 172.16.0.3 に対するクライアントからのリクエストは、各 ServerName ディレクティブで指定したホストに割り振られるようになります。また、一般的には仮想サイトごとに異なるコンテンツを提供するため DocumentRoot ディレクティブで各仮想サイトの起点となるディレクトリを指定します。つまり、http://www.example.com/index.html というリクエストに対しては、/var/www/html/example.com/index.html がクライアントに返され、http://www.example.jp/index.html というリクエストに対しては、/var/www/html/example.jp/index.html が返されます。その他にも、必要に応じて virtual host コンテキストで指定可能なディレクティブを記述することができます。上記の例では、仮想サイトごとに、ServerAdmin、ErrorLog、TransferLog ディレクティブを指定しています。

/etc/httpd/conf/httpd.conf の編集後は変更を反映させるために Apache の再起動が必要です。

9.21.2. IP アドレスベースのバーチャルホスト

IP アドレスベースのバーチャルホストを利用するには複数のネットワークカードを搭載するか、あらかじめ 1 つのネットワークインターフェースに対し、複数の IP アドレスを割り振るエイリアスの設定をしておく必要があります。TurboTools の turbonetcfg を使用すれば、エイリアスの設定は簡単に行うことができます。なお、DNS サーバーによる名前解決はすでに完了しているものとします。

実際の設定は、以下のようになります。

<VirtualHost 172.16.0.3>
    ServerName   www.example.com
    ServerAdmin  webmaster@example.com
    DocumentRoot /var/www/html/example.com
    ErrorLog     /var/log/httpd/example.com_error_log
    TransferLog  /var/log/httpd/example.com_access_log
</VirtualHost>

<VirtualHost 172.16.0.4>
    ServerName   www.example.jp
    ServerAdmin  webmaster@example.jp
    DocumentRoot /var/www/html/example.jp
    ErrorLog     /var/log/httpd/example.jp_error_log
    TransferLog  /var/log/httpd/example.jp_access_log
</VirtualHost>

ホストベースの設定と異なり、<VirtualHost> ディレクティブの値にによって、クライアントからのリクエストが各仮想ホストに割り振られるようになります。

注意

<Virtual addr[:port]> ディレクティブに指定した IP アドレスやポート番号宛のリクエストは、それだけではサーバーが受け付けることはできません。Listen ディレクティブでこれらのリクエストを受け付けるように指定する必要があります。

/etc/httpd/conf/httpd.conf の編集後は変更を反映させるために Apache の再起動が必要です。