この文書では名前ベースのバーチャルホストをどんなとき、 どうやって使うかを説明します。
IP ベースのバーチャルホストでは、応答する バーチャルホストへのコネクションを決定するために IP アドレスを使用します。ですから、それぞれのホストに個々に IP アドレスが必要になります。これに対して名前ベースのバーチャルホストでは、 クライアントが HTTP ヘッダの一部としてホスト名を告げる、 ということに依存します。この技術で同一 IP アドレスを異なる多数のホストで共有しています。
名前ベースのバーチャルホストは通常単純で、それぞれのホスト名と それに対応する正確な IP アドレスを DNS で設定し、異なる ホスト名を区別するように Apache HTTP サーバを設定するだけです。 さらに、名前ベースのバーチャルホストは不足する IP アドレスの需要を緩和します。したがって、IP ベースのバーチャルホストを 選択すべき特定の理由がなければ名前ベースのバーチャルホストを使うべきです。 IP ベースのバーチャルホストを使用することを考慮する理由として、
名前ベースのバーチャルホストを使うには、そのホストへの
リクエストを受け付けるサーバの IP アドレス (もしかしたらポートも)
を指定する必要があります。
これは *
の属性を使ってサーバの全ての IP アドレスを使います。
(例えば SSL の使用などで) 複数のポートを使うことを計画しているのであれば、
引数に *:80
のようにポートも含めるようにしてください。
次は、扱うホストそれぞれに対して *
)。それぞれの
既にあるウェブサーバにバーチャルホストを追加する場合、
既存のウェブサーバに対しても
たとえば、www.domain.tld
を動かしていて、
さらにバーチャルホスト www.otherdomain.tld
を追加するとしましょう。このバーチャルホストは同一 IP を指しているとします。
そのような場合は、httpd.conf
に以下のようなコードを追加するだけです
複数の名前でサーバアクセスができるようにしたいことも多いでしょう。
このようなことは、
domain.tld
ドメインへの全てのホストへのリクエストは
www.domain.tld
のバーチャルホストが処理します。
名前をマッチさせるために、ワイルドカード文字 * や ?
を使用することもできます。もちろん思いつきの名前を作って、
最後に、
リクエストが来ると、サーバはまず最初に
結果として、リストの最初のバーチャルホストが デフォルト の
バーチャルホストになります。IP アドレスが <VirtualHost>
コンテナにそれを記述してください。
以前述べたように、名前ベースのバーチャルホストが正しく動作する ために必要な情報を送ってこないクライアントが依然として存在しています。 そのようなクライアントに対しては、該当する IP アドレスについて、 一番最初に設定されているバーチャルホスト (プライマリの名前ベースのバーチャルホスト) からページが送り返されます。
「古い」と表現している場合、本当に古いことを意味して使っています。
不幸にして今現在でもこのような古いブラウザに遭遇することがあります。
現在のブラウザは全て、名前ベースのバーチャルホストに必要な
Host
ヘッダを送ります。
ServerPath
ディレクティブで対処が可能です。ちょっと不格好ですけれども。
設定例
この例にはどういう意味があるでしょうか? これは
"/domain
" で始まる URI へのリクエストはすべて、
バーチャルホスト www.domain.tld
で処理される、
という意味です。つまり、すべてのクライアントで
http://www.domain.tld/domain/
でアクセスできるページが、
Host:
ヘッダを送ってくるクライアントであれば
http://www.domain.tld/
としてもアクセスできる、
という意味です。
これが動作するようにするには、
プライマリのバーチャルホストのページに
http://www.domain.tld/domain/
へのリンクを設置します。
そして、バーチャルホストのページでは、純粋な相対リンク (例:
"file.html
" や "../icons/image.gif
")、
あるいは /domain/
で始まるリンク (例:
"http://www.domain.tld/domain/misc/file.html
" や
"/domain/misc/file.html
") だけを設置します。
これには、幾分かの規律が必要となりますが、 このようなガイドラインを忠実に守ることにより、たいていの場合、 すべてのブラウザで ― 新しいブラウザでも古いものでも ― 作成したページが見えるということを保証します。