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 だと認識します。
最後に
次回は、実際にバーチャルホストを設定して動作を確認したいと思います。