Apache 名前ベースのバーチャルホストの設定 【説明編】

1つのwebサーバ(Apache)で1つのディレクトリ(ドキュメントルート)しか公開できないのか?

Aサービスを公開してるんだけど、Bサービスも公開したい。Bサービス用にApacheを構築しないといけないのか?1webサービス毎に1つのApacheしか使えないのか?というような疑問もあるかもしれません。

いわゆる、上記のようにApacheは1つで、複数のWEBサイトを公開したい。そんな時にApacheのバーチャルホストという機能によって複数のディレクトリ(ドキュメントルート)を公開できます。
具体的な例で言うと、Aサービスは http://test.a でアクセスすると、Aサービスのドキュメントルートを参照し、Bサービスは http://test.b でアクセスするとBサービス用のドキュメントルートの参照ができます。

バーチャルホストの設定は2つ方法があります。

・IPアドレスベースの設定
・名前ベースの設定

今回は、名前ベースの設定について説明します。
名前ベースとは簡単に言うとホスト名毎にドキュメントルートを使用するイメージになります。

ディレクティブ

バーチャルホストの設定に必要なディレクティブは以下になります。

・NameVirtualHost
・VirtualHost

NameVirtualHost ディレクティブ

使用するIPアドレスを指定します。

Ex)

NameVirtualHost 127.0.0.1:80

なお、* (IPアドレスはなんでも良い(任意))による指定も可能です。

NameVirtualHost *:80

VirtualHost ディレクティブ

NameVirtualHost ディレクティブで指定したIPアドレスを指定します。
* を指定の場合でも、VirtualHostでは同じく * を指定します。

NameVirtualHost ディレクティブで指定したIPアドレスが VirtualHost ディレクティブ で参照されるイメージです。

<VirtualHost 127.0.0.1:80>

</VirtualHost>

なお、* の場合、IPアドレスはなんでも良い(任意)となります。

<VirtualHost *:80>

</VirtualHost>

バーチャルホストの設定例

以下は、ローカル環境で、http://test_a にアクセスすると /www-contents ディレクトリをドキュメントルートとし参照される設定になります。

NameVirtualHost 127.0.0.1:80

<VirtualHost 127.0.0.1:80>
    ServerName test_a
    DocumentRoot /www-contents
</VirtualHost>

http通信の流れ(イメージ)

NameVirtualHostにローカルホストのIPアドレスを設定する場合を例に説明します。
127.0.0.1 が ホス名 test_a と hosts設定されている場合、http://test_a でwebサーバへアクセスが可能となります。
hostsについては以下を参考にして下さい。

webサーバはまず、NameVirtualHost ディレクティブに指定されたIPアドレスが一致することを確認します。
今回は http://test_a が 127.0.0.1 とhosts設定されているので http://test_a で接続すると 127.0.0.1 であると認識します。

次にwebサーバはNameVirtualHost ディレクティブで指定されたIPアドレスと同じ指定がされた VirtualHost ディレクティブを参照します。

次に webサーバは通信元のホスト名、今回は test_a を見て ServerName ディレクティブに指定された test_a を参照します。
DocumentRoot が /www-contents なので、 test_aのドキュメントルートは /www-contents だと認識します。

最後に

次回は、実際にバーチャルホストを設定して動作を確認したいと思います。

© DeNnie.Lab All Rights Reserved.