[an error occurred while processing this directive]
[APACHE DOCUMENTATION]

Apache HTTP Server Version 1.3

Apache name-based Virtual Host Support

See Also: IP-based Virtual Host Support

Name-based と IP-based のバーチャルホスト

IP-based のバーチャルホストの方法は、うまく動いていても、最も簡潔な解決法ではありません。なぜなら、専有の IP アドレスがそれぞれのバーチャルホストに必要となり、マシンのいくつかでは実行が困難だからです。HTTP/1.1 プロトコルには、アドレスされている名前をサーバに確認するための方法があります。Apache 1.1 とそれ以降では、以前からあるホスト名毎の IP アドレスのやり方でこれをサポートしています。

新しい name-based のバーチャルホストのサポートを使う利点は、事実上サーバの数の制限がないこと、コンフィギュレーションと使用の簡便化、追加のハードウェアとソフトウェアが必要ないことです。不都合な点は、クライアントがプロトコルのこの部分をサポートしていなければならないことです。ほとんどのブラウザの最新版はサポートしていますが、そうではない古いブラウザもあります。これが問題になるかもしれませんが、可能な解決法は以下にあります。

non-IP のバーチャルホストの使用

新しいバーチャルホストを使うのは極めて簡単で、表面的には古い方法と似て見えます。単に以下のようなコードを Aoache のコンフィギュレーションファイル(ほとんどの場合 httpd.confsrm.conf)の一つに追加します:

    NameVirtualHost 111.22.33.44

    <VirtualHost 111.22.33.44>
    ServerName www.domain.tld
    DocumentRoot /web/domain
    </VirtualHost>

IP-based と name-based のバーチャルホストのコンフィギュレーションの明らかな違いは、name-based のバーチャルホストに対するターゲットとして使われるべき IP アドレスを指定する NameVirtualHost 命令です。

もちろん、なんらかの追加の命令は <VirtualHost> に置き換えられます。これを可能にするには、www.domain.tld が IP アドレス 111.22.33.44 を示しているエイリアス(CNAME)であることを確認するだけです。

その上、多くのサーバは一つ以上の名前でアクセス可能であることを望むかもしれません。例えば、例として挙げたサーバは、同じサーバを示す IP アドレスを仮定した domain.tldwww2.domain.tld のようにアクセス可能であることを望んでいるのかもしれません。実際、domain.tld の全てのアドレスがサーバに引っかかることが望ましいのです。これは <VirtualHost> 部分にある ServerAlias 命令で可能です。例えば:

    ServerAlias domain.tld *.domain.tld

ワイルドカードとして *? を使うことができます。

もしドメイン名を必ずしも含まないローカルユーザを与えているのなら、ServerAliasが必要かもしれません。例えば、ローカルユーザが"www"か"www.foobar"に親しんでいるなら、ServerAlias www www.foobarを追加する必要があるでしょう。クライアントはリクエストの中に情報を入れていないので、name 解析にクライアントが何のドメインを使っているのかを知るのは、サーバには不可能です

古いブラウザとの互換性

先に書いたように、name-based のバーチャルホストが正しく動かすための、要求されたデータを送信しないクライアントがまだあります。これらのクライアントは、一番目の name-based のバーチャルホストからのページを送信されます(指定した IP アドレスのコンフィギュレーションファイルで最初に書かれているバーチャルホスト)。

ServerPath 命令の次善策がありますが、ちょっとやっかいなものです:

Example configuration:

    NameVirtualHost 111.22.33.44

    <VirtualHost 111.22.33.44>
    ServerName www.domain.tld
    ServerPath /domain
    DocumentRoot /web/domain
    </VirtualHost>

これは何を意味するのかというと、バーチャルホストwww.domain.tldから受け取られる"/domain"で始まる URL に対するリクエストを示しています。これは全てのクライアントに対して 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")

これは多少の訓練を必要としますが、このガイドラインを守れば、大抵の場合、ブラウザが古くてもページが見れることを保証するでしょう。

参照: ServerPath configuration example


Apache HTTP Server Version 1.3

検索文字
Index Home The English original manual is here.
このページの情報に関わる、ご質問、お問い合わせは、 japache@infoscience.co.jpまで。

JAPACHE ホームページ