From: Yoshiki Hayashi ファイル記述子の問題についての詳細や、
- オペレーティングシステムごとの解決方法については「ファイル記述子と
- Apache」の文書を参照してください。
- www.company1.com and www.company2.com のような)
二つ以上のウェブサイトを扱う運用方法のことを指します。
バーチャルホストには、各ウェブサイトに違う IP アドレスがある
- 「IP ベース」と、単一の IP アドレスに
+ 「IP ベース」と、それぞれの IP アドレスに
複数の名前がある「名前ベース」とがあります。
- 複数のサイトが同じサーバで扱われている、ということはエンドユーザには
+ 複数のサイトが物理的に同じサーバで扱われている、ということはエンドユーザには
明らかではありません。
Apache は、特に手を入れない状態で IP ベースのバーチャルホスト
@@ -29,9 +30,13 @@
- バーチャルホストの設定のデバッグをするには
- Apache のコマンドラインスイッチ このコマンドは Apache が設定ファイルをどう解析したかについて出力します。
@@ -75,4 +80,4 @@
href="../programs/httpd.html">httpd プログラムの説明文書を見てください) この文書では名前ベースのバーチャルホストをどんなとき、
+ どうやって使うかを説明します。 IP ベースのバーチャルホストでは、応答する
+ バーチャルホストへのコネクションを決定するために IP
+ アドレスを使用します。ですから、それぞれのホストに個々に IP
+ アドレスが必要になります。これに対して名前ベースのバーチャルホストでは、
+ クライアントが HTTP ヘッダの一部としてホスト名を告げる、
+ ということに依存します。この技術で同一 IP
+ アドレスを異なる多数のホストで共有しています。 名前ベースのバーチャルホストは通常単純で、それぞれのホスト名と
+ それに対応する正確な IP アドレスを DNS で設定し、異なる
+ ホスト名を区別するように Apache HTTP サーバを設定するだけです。
+ さらに、名前ベースのバーチャルホストは不足する IP
+ アドレスの需要を緩和します。したがって、IP ベースのバーチャルホストを
+ 選択すべき特定の理由がなければ名前ベースのバーチャルホストを使うべきです。
+ IP ベースのバーチャルホストを使用することを考慮する理由として、 名前ベースのバーチャルホストを使うには、そのホストへの
+ リクエストを受け付けるサーバの IP アドレス (もしかしたらポートも)
+ を指定する必要があります。
+ これは 次は、扱うホストそれぞれに対して 既にあるウェブサーバにバーチャルホストを追加する場合、
+ 既存のウェブサーバに対しても たとえば、 複数の名前でサーバアクセスができるようにしたいことも多いでしょう。
+ このようなことは、 最後に、 リクエストが来ると、サーバはまず最初に 結果として、リストの最初のバーチャルホストが デフォルト の
+ バーチャルホストになります。IP アドレスが 以前述べたように、名前ベースのバーチャルホストが正しく動作する
+ ために必要な情報を送ってこないクライアントが依然として存在しています。
+ そのようなクライアントに対しては、該当する IP アドレスについて、
+ 一番最初に設定されているバーチャルホスト
+ (プライマリの名前ベースのバーチャルホスト)
+ からページが送り返されます。 「古い」と表現している場合、本当に古いことを意味して使っています。
+ 不幸にして今現在でもこのような古いブラウザに遭遇することがあります。
+ 現在のブラウザは全て、名前ベースのバーチャルホストに必要な
+ 設定例 この例にはどういう意味があるでしょうか? これは
+ " これが動作するようにするには、
+ プライマリのバーチャルホストのページに
+ これには、幾分かの規律が必要となりますが、
+ このようなガイドラインを忠実に守ることにより、たいていの場合、
+ すべてのブラウザで ― 新しいブラウザでも古いものでも ―
+ 作成したページが見えるということを保証します。-t -D DUMP_VHOSTS が便利です。
+ Apache のコマンドラインスイッチ -S が便利です。
つまり、以下のコマンドを入力します:
+
+
+* の属性を使ってサーバの全ての IP アドレスを使います。
+ *)。それぞれの www.domain.tld を動かしていて、
+ さらにバーチャルホスト www.otherdomain.tld
+ を追加するとしましょう。このバーチャルホストは同一 IP を指しているとします。
+ そのような場合は、httpd.conf
+ に以下のようなコードを追加するだけです
+
+ <VirtualHost *>
+
+ DocumentRoot /www/domain
+
+
+ <VirtualHost *>
+
+ DocumentRoot /www/otherdomain
+
+ domain.tld ドメインへの全てのホストへのリクエストは
+ www.domain.tld のバーチャルホストが処理します。
+ 名前をマッチさせるために、ワイルドカード文字 * や ?
+ を使用することもできます。もちろん思いつきの名前を作って、
+ <VirtualHost> コンテナにそれを記述してください。Host ヘッダを送ります。ServerPath
+ ディレクティブで対処が可能です。ちょっと不格好ですけれども。
+
+ <VirtualHost 111.22.33.44>
+
+ ServerPath /domain
+ DocumentRoot /web/domain
+
+ /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") だけを設置します。