これまでの説明ではDocumentRootやディレクトリへの権限設定など、Apacheの基本的な説明をしてきました。しかし、今までの設定方法では1つのDocumentRootしか設定することができません。そのため複数のドメインを使用してサービスをできない設定となっています。
しかしながら実際は1台のサーバ、1つのApacheで複数のドメイン、複数のドキュメントルートでの=サービスを行いたいケースは多くあるかと思います。今回は、そのような問題を解決することができるVirtualHostの説明をしていきたいと思います。
VirtualHostとは?
VirtualHostとは、複数のドメインをそれぞれのDocumentRootでサービスを行うことができるApacheの機能です。具体的に説明をしたいと思います。
たとえば、example.comとexample.netというドメインを複数運用していたとします。それぞれのドメインを別々のサーバで使用するのであれば設定は簡単です。しかし、アクセスが多くない場合はドメインごとにサーバを新規に構築するのはコストに見合わないケースが多いでしょう。
このようなとき、VirtualHostを使うことで1台のサーバーにインストールした1つのApacheを使って、複数ドメインでのサービスを行うことができるのです。
VirtualHostの種類
VirtualHostには大きく分けて3つの種類があります。
NameVirtual、IPVirtual、PortVirtualの3つです。それでは3つの特徴をみてみましょう。
NameVirtual
名前ベースでアクセスを振り分ける(ApacheはHostHeaderで判断)
- 想定されうる用途
- SSLを使わない小規模なサービス(格安のレンタルサーバなど)。
- メリット
- IPアドレスの取得が不要
- デメリット
- 運用が煩雑になる可能性がある
- HTTPSでサービスを複数行うことができない
IP Virtual
IPアドレスでアクセスを振り分ける。
- 想定されうる用途
- SSLを使用する大規模サイト(企業で使用する多くの場合)
- メリット
- Portを変更することがなく、HTTPSでサービスを複数運用することができる
- デメリット
- IPアドレスを取得する必要がある
Port Virtual
Port番号でアクセスを振り分ける
- 想定されうる用途
- NAT後の内部ネットワークでの利用
- メリット
- IPアドレスの取得が不要
- デメリット
- WellKnownPort以外を使用するとき、ユーザ側で明示的にPortを指定する必要がある
それぞれメリット・デメリットがありますね。使うときによって最適な方法を選択するようにしてください。
hostsを書き換えて準備をする
それではApacheの設定に入る前に、確認用の環境を整備します。
アクセスをする側のPCのhostsというファイルを修正することで、名前解決をLocal内で行わせることができます。それぞれのOSでのhostsファイルの場所は以下です。確実にバックアップを取得してから行ってください。
それでは上記のファイルに下記の1行を追加しましょう。IPアドレスは、ApacheがインストールされているサーバのIPアドレスを記述してください。
なお、この操作は他のアプリケーションの動作にも影響するので慎重に操作してください。
NameVirtualを設定する
それではここからは実際に設定をしていきましょう。まずはNameVirtualからです。
Sampleで用意してあるhttpd.confの238行目~244行目までがNameVirtualの設定です。Sampleではコメントアウトしてあるので、外して使用しましょう。
DocumentRootやLog用のディレクトリが作成されていないとapacheは起動しません。作成してからApacheを再起動しましょう。
ブラウザからアクセスしてみてください。www.example.comと表示されれば成功です。
[TIPS]HTTPのヘッダを見てみよう
アクセスできたのは理解できても、なんとなくしっくりこない方もいらっしゃるでしょう。そんなときは、HTTPのヘッダを確認してみると良いと思います。FirefoxのアドオンでLiveHTTPHeadersというものがありますので、これを使ってみましょう。LiveHTTPHeadersをインストールした状態でアクセスをすると図のように表示されます。
HTTPヘッダを見ることができます。この場合では、Host: www.example.comというヘッダが送られているのがわかると思います。Apacheはこの情報を見てリクエストを判断することができているのです。
より効率の良いサーバ構成へ
さて、今回はVirtualHostの中でも、とくにNameVirtualに焦点を絞って説明をしてきました。もし無駄にサーバを分けていたり、Apacheを分けているようなケースがあれば、ぜひVirtualHostを適用してみてください。
しかしながら、NameVirtualも万能ではありません。状況に応じて最適なVirtualHostの種類は異なってきます。
次回以降で、その他のVirtualHostの説明をしていく予定です。