バーチャルホスト


一台のホストに複数のホスト名が割り当てられている場合、esehttpdはそのホスト名の各々について別々の内容のWebページを送り出すことができます。この機能をバーチャルホストと呼びます。バーチャルホストには、ネームバーチャルホストとIPバーチャルホストの2種類があります。ネームバーチャルホストはHTTP 1.1で導入された規格で、同一のIPアドレスを持つ複数のホスト名の各々を独自のサーバのように見せる機能です。ネームバーチャルホストはHTTP 1.1に対応しているクライアントに対してのみWebページを提供できますが、対応していないクライアントでは一切そのバーチャルホストにアクセスできません。一方のIPバーチャルホストは、各々のホスト名がそれぞれ独自のIPアドレスを持っている場合に利用でき、HTTP 1.1に対応していないクライアントからでもアクセスできます。IPバーチャルホストを利用するには一台のホストマシンに複数のIPアドレスを付ける必要がありますが、これは複数のネットワークカードを使うか、あるいはIPエイリアス機能がある OSでは一つのネットワークカードに複数のIPアドレスを付けることができます。
esehttpdでバーチャルホストを利用するには、設定ファイル(esehttpd.conf)に<VirtualHost>セクションを書き、その内側にDocumentRootディレクティブでそのバーチャルホストのトップのURIに対応するディレクトリを指定します。また、DocumentRoot以外にも多くのディレクティブがバーチャルホスト毎に設定できます。例えば次のように記述すればfoo.orgbar.orgという二つのバーチャルホストが利用できるようになります。
  <VirtualHost foo.org>
    DocumentRoot /var/www/foo
    CustomLog /var/log/esehttpd/access_log_foo
  </VirtualHost>
  <VirtualHost bar.org>
  DocumentRoot /var/www/bar
  CustomLog /var/log/esehttpd/access_log_bar
  </VirtualHost>
esehttpdの設定ファイルの中ではネームバーチャルホストとIPバーチャルホストは明示的には区別されていません。<VirtualHost>が、もしそれと同一のIPアドレスを持つ別のバーチャルホストがあればそれはネームバーチャルホストになり、そうでないならばIPバーチャルホストになります。
ネームバーチャルホストはその仕組み上、SSLは基本的に利用できません。これはSSLのサーバ認証がホスト名を対象に行われるのに対し、ネームバーチャルホストはサーバとコネクションを接続した後にホストを切替えるような仕組みになっているためです。そのため、ネームバーチャルホストにSSLで接続した場合には正しくないホストのサーバ証明書がクライアントに送られる可能性があります。
また同じIPアドレスを持つネームバーチャルホストの同士では、Port番号を同一にしなければなりません。esehttpdの設定ファイルにもし別々のPort番号を指定した場合は、ホスト名を比較して辞書順で若い名前を持つバーチャルホストに対するPort番号の指定が優先され、それ以外の指定は無視されます。
Akira Higuchi