バーチャルホスト

バーチャルホスト (Virtual Host) とは1つのサーバで複数のドメインを運用する技術のことで、Webサーバ、メールサーバなどで利用される。

用途
通常はWebサーバやメールサーバを運用するのにドメインの数以上のサーバコンピュータが必要となる。バーチャルホストを利用すると1つのサーバコンピュータで複数のドメインを運用することができ、サーバコンピュータの数を減らし運用のコストを下げることができる。また、後述する名前ベースバーチャルホストの場合はIPアドレスも節約することができる。
また、ドメインの追加も容易で、小規模Webサイトの運営や安価なレンタルサーバサービスなどでの利用が盛んである。
バーチャルホストには大きくわけてIPベースバーチャルホストと名前ベースバーチャルホストの2種類の方法がある。

IPベースバーチャルホスト
IPベースバーチャルホストは、利用するドメイン名ごとにIPアドレスを用意し、1つのサーバコンピュータに複数のIPアドレスを割り当てる。

クライアントが接続したいドメインごとに異なるIPアドレスへ接続してくるため、サーバソフトウェアは接続先IPアドレスを見て利用するドメインを判別する。
IP層のみでドメインの判定が可能なため、アプリケーションプロトコルの種類に依らずサーバソフトウェアはIPベースバーチャルホストを実装することができる。

汎用性の高い方法であるが、IPアドレスを増やすことが困難な場合には向かない。(一般にIPアドレスの取得は高コストである)

1台の物理サーバコンピュータへの複数IPアドレス割り当ては、NICを複数枚搭載するほかに、「IPエイリアス」という機能によっても実現されている。

名前ベースバーチャルホスト
名前ベースバーチャルホストは、利用するドメイン名すべてに同じIPアドレスを使用し、1つのサーバコンピュータに必要なIPアドレスが1つで済む。

クライアントが接続したドメインにかかわらず同じIPアドレスへ接続してくるため、IP層の情報だけではドメインの判別ができない。
ドメインを判別するためにはアプリケーションプロトコルの側に接続先ドメインを判別する情報が含まれている必要がある。HTTPの場合はHostヘッダ、SMTPの場合はRcpt Toに含まれるメールアドレスのドメインで判別を行なう。

アプリケーションプロトコルに接続先ドメインの情報が含まれないサーバソフトウェアでは実装することができない。またTLSはアプリケーション層プロトコルの通信を開始する前にネゴシエーションを行う形で利用されることが多く、この時点でサーバ証明書を使い分けることができない。このため、HTTPではバーチャルホストを実装できるにもかかわらずHTTPSでは運用できないという事態が発生する。この問題に対処するため、2003年Server Name Indicationという拡張仕様がTLSに定義された。

ドメインを追加する場合にも、サーバソフトウェアの設定を変更するだけで対応することができるため、非常に安価である。

デメリット
バーチャルホストは複数のドメインを運用する上で安価で簡単な方法であるが、複数のドメインを1つのサーバコンピュータで運用するため、同一サーバコンピュータで運用されている他のドメインの負荷過大などの問題点も共有してしまう。

名前ベースのバーチャルホストは、ウェブブラウザーの場合サポートをしていないとサーバー上の最初に登録されたエントリーにしかアクセスすることができなかったが、現在主流のブラウザーは全てサポートしている。

また、機器メンテナンスなどでサーバソフトウェアを停止する場合などは、すべてのドメインが停止することになる。

代表的なサーバソフトウェア
 HTTP
 Apache HTTP Server
 Apache Tomcat
 IIS
nginx
 SMTP
 Postfix
 qmail

外部リンク
 Apache バーチャルホスト説明書 Webサーバ Apache 2.4におけるバーチャルホストの使用方法

はちやるほすと