Apache Virtual Host を使用すると、同じサーバーで複数の Web サイトを実行できます。
たとえば、1 つの Apache Web サーバーが実行されている 1 つの物理サーバー上で、thegeekstuff.com と top5freeware.com の両方を実行できます。
図:Apache 仮想ホスト (複数の Web サイト、1 つの Apache)
Apache 仮想ホスト構成には、1) IP ベースの仮想ホストと 2) 名前ベースの仮想ホストの 2 種類があります。ほとんどのシナリオでは、名前ベースの仮想ホストが推奨されます。
IP ベースの仮想ホスト
この構成では、2 つの Web サイト (異なる IP アドレスを持つ) を Apache を実行するサーバーに向ける場合、その物理サーバーには 2 つの異なる IP アドレスが構成されている必要があります。
これは、サーバーには 2 つのイーサネット カードが必要であり、それぞれが Apache 仮想ホストが提供する対応する Web サイトの IP アドレスに構成されている必要があることを意味します。したがって、これはほとんどの面で実用的ではなく、使用しないでください。
次の例では、サーバーに 2 つの NIC カードが含まれており、1 枚は thegeekstuff.com 用に 192.168.101.1 の IP アドレスで構成され、もう 1 枚は top5freeware.com 用に 192.168.102.1 で構成されています。これらの IP アドレスは両方とも、IP ベースの仮想ホストを使用して、そのサーバー上で実行されている単一の Apache Web サーバーによって提供されます。
図:Apache IP ベースの仮想ホスト
名前ベースの仮想ホスト
この構成では、Apache ウェブサーバーがリクエストを受信すると、HTTP ヘッダーでホスト名を検索し、ホスト名に応じて異なるウェブサイトを提供します。その物理サーバーで必要な IP アドレスは 1 つだけなので、これは非常に簡単です。ただし、同じ IP アドレスを指す複数の Web サイト名で DNS を更新します。実際には、名前ベースの仮想ホスト構成のみを使用します。
次の例では、サーバーには 192.168.101.1 IP アドレスで構成された NIC カードが 1 つだけ含まれています。 thegeekstuff.com と top5freeware.com の両方の Web サイトの DNS エントリは、192.168.101.1 の IP アドレスを指しています。 Apache はリクエストを受信すると、HTTP ヘッダーでホスト名エントリを検索し、対応する Web サイトを提供します。
図:Apache 名前ベースの仮想ホスト
1. httpd.conf 内の httpd-vhosts.conf のコメントを外します
ソースから Apache 2 をインストールした場合、デフォルトでは、次の行が httpd.conf ファイルでコメント化されます。この行のコメントを外してください。
# vi /usr/local/apache2/conf/httpd.conf Include conf/extra/httpd-vhosts.conf
2.仮想ホストのセットアップ
以下に示すように httpd-vhosts.conf を変更して、2 つのホストの名前付きベースの仮想ホスト設定をセットアップします。
- NameVirtualHost *:80 – すべての名前ベースの仮想ホストがデフォルト ポート 80 でリッスンすることを示します
- 次の例では、同じポート 80 でリッスンする thegeekstuff.com と top5freeware.com の仮想ホストをセットアップしています。そのため、各 Web サイトに 1 つずつ、2 つの
- thegeekstuff.com にアクセスすると、/usr/local/apache2/docs/thegeekstuff の下のファイルが Apache によって提供されます。このサイトの access_log と error_log は /usr/local/apache2/logs/thegeekstuff に保存されます
# vi /usr/local/apache2/conf/extra/httpd-vhosts.conf NameVirtualHost *:80 <VirtualHost *:80> ServerAdmin [email protected] DocumentRoot "/usr/local/apache2/docs/thegeekstuff" ServerName thegeekstuff.com ServerAlias www.thegeekstuff.com ErrorLog "logs/thegeekstuff/error_log" CustomLog "logs/thegeekstuff/access_log" common </VirtualHost> <VirtualHost *:80> ServerAdmin [email protected] DocumentRoot "/usr/local/apache2/docs/top5freeware" ServerName top5freeware.com ServerAlias www.top5freeware.com ErrorLog "logs/top5freeware/error_log" CustomLog "logs/top5freeware/access_log" common </VirtualHost>
3. VirtualHost 構成の構文を確認してください
以下に示すように、「httpd -S」を使用して仮想構成の構文を確認します。すべてが適切にセットアップされると、「Syntax OK」と表示されるだけです。
# /usr/local/apache2/bin/httpd -S VirtualHost configuration: Syntax OK
何かが適切に構成されていない場合、以下に示すように「ディレクトリが終了しません」というメッセージを含む警告メッセージが表示されます。
# /usr/local/apache2/bin/httpd -S Warning: DocumentRoot [/usr/local/apache2/docs/top5freeware] does not exist Warning: ErrorLog [/usr/local/apache2/logs/thegeekstuff] does not exist Syntax OK
4. Apache を再起動してテストします
# /usr/local/apache2/bin/apachectl restart
これで、thegeekstuff.com (または www.thegeekstuff.com) にアクセスすると、Apache は /usr/local/apache2/docs/thegeekstuff ディレクトリからファイルを提供します。
top5freeware.com (または www.top5freeware.com) にアクセスすると、同じサーバーで実行されている同じ apache が /usr/local/apache2/docs/top5freeware ディレクトリからファイルを提供します。
繰り返しますが、名前ベースの仮想ホストが適切に機能するには、これらの両方の Web サイトの DNS エントリが、Apache Web サーバーが実行されている物理サーバーの同じ外部 IP アドレスを指している必要があります。