サーバコンフィギュレーション:
... Port 80 DocumentRoot /www/domain ServerName www.domain.tld <VirtualHost 111.22.33.55> DocumentRoot /www/otherdomain ServerName www.otherdomain.tld ... </VirtualHost>www.otherdomain.tld はアドレス 111.22.33.55 を通じてつながる一方、www.domain.tld は 111.22.33.44 (メインサーバ) を通じてつながります。
サーバコンフィギュレーション:
... Port 80 ServerName server.domain.tld <VirtualHost 111.22.33.44> DocumentRoot /www/domain ServerName www.domain.tld ... </VirtualHost> <VirtualHost 111.22.33.55> DocumentRoot /www/otherdomain ServerName www.otherdomain.tld ... </VirtualHost>メインサーバは決してリクエストを受け取りません。なぜなら、マシンにある全ての IP アドレスは IP-based のバーチャルホストのために使用中だからです(localhost リクエストはメインサーバをヒットすることができます)
サーバコンフィギュレーション:
... Port 80 Listen 111.22.33.44:80 Listen 111.22.33.55:8080 ServerName server.domain.tld <VirtualHost 111.22.33.44:80> DocumentRoot /www/domain ServerName www.domain.tld ... </VirtualHost> <VirtualHost 111.22.33.55:8080> ServerName www-cache.domain.tld ... <Directory proxy:> order deny,allow deny from all allow from 111.22.33 </Directory> </VirtualHost>メインサーバは決してリクエストを受け取りません。なぜなら、マシンの全ての IP アドレス (localhost から離れたもの) は IP-based のバーチャルホストで使われているからです。ウェブサーバはポート 80 を通した最初のアドレスと ポート 8080 を通した2番目のアドレスのプロキシーだけがつながります。
サーバコンフィギュレーション:
... Port 80 ServerName server.domain.tld NameVirtualHost 111.22.33.44 <VirtualHost 111.22.33.44> DocumentRoot /www/domain ServerName www.domain.tld ... </VirtualHost> <VirtualHost 111.22.33.44> DocumentRoot /www/subdomain ServerName www.sub.domain.tld ... </VirtualHost>localhost は別にして、指定された addresses/ports があり、メインサーバだけが localhost のリクエストを受け取ります。www.domain.tld が最も高い優先度を持っているせいで、default や primary のサーバとしては見られません。
サーバコンフィギュレーション:
... Port 80 ServerName www.domain.tld DocumentRoot /www/domain NameVirtualHost 111.22.33.55 <VirtualHost 111.22.33.55> DocumentRoot /www/otherdomain ServerName www.otherdomain.tld ... </VirtualHost> <VirtualHost 111.22.33.55> DocumentRoot /www/subdomain ServerName www.sub.domain.tld ServerAlias *.sub.domain.tld ... </VirtualHost>111.22.33.55 以外のアドレスに対するリクエストは、メインサーバから与えられます。Host:
が知られていないか、あるいは存在しない 111.22.33.55 へのリクエストは、www.otherdomain.tld から与えられます。
サーバコンフィギュレーション:
... Port 80 ServerName server.domain.tld NameVirtualHost 111.22.33.44 <VirtualHost 111.22.33.44> DocumentRoot /www/domain ServerName www.domain.tld ... </VirtualHost> <VirtualHost 111.22.33.44> DocumentRoot /www/subdomain1 ServerName www.sub1.domain.tld ... </VirtualHost> <VirtualHost 111.22.33.44> DocumentRoot /www/subdomain2 ServerName www.sub2.domain.tld ... </VirtualHost> <VirtualHost 111.22.33.55> DocumentRoot /www/otherdomain1 ServerName www.otherdomain1.tld ... </VirtualHost> <VirtualHost 111.22.33.66> DocumentRoot /www/otherdomain2 ServerName www.otherdomain2.tld ... </VirtualHost>
サーバコンフィギュレーション:
... Listen 80 Listen 8080 ServerName www.domain.tld DocumentRoot /www/domain <VirtualHost 111.22.33.44:8080> DocumentRoot /www/domain2 ... </VirtualHost>ポート 80 で www.domain.tld に対するリクエストはメインサーバから与えられ、ポート 8080 へのリクエストは、バーチャルホストから与えられます。
_default_
を使ったバーチャルホストサーバコンフィギュレーション:
... <VirtualHost _default_:*> DocumentRoot /www/default ... </VirtualHost>実際にワイルドカードのポートでデフォルトのバーチャルホストを使うと、リクエストがメインサーバへ向かうのを妨げます。
デフォルトのバーチャルホストは、name-based のバーチャルホストのために使われる address/port を送信されたリクエストを決して与えません。もしリクエストが、知られていないか、存在しないHost:
ヘッダを含んでいれば、常に最初の name-based のバーチャルホストから与えられます(コンフィギュレーションファイルで最初に現れる address/port のためのバーチャルホスト)。
単一のインフォメーションページ(またはスクリプト)に対するリクエストを書き換えるために、AliasMatch
かRewriteRule
を使うことができます。
_default_
のバーチャルホストを使いたいのです。
サーバコンフィギュレーション:
... <VirtualHost _default_:80> DocumentRoot /www/default80 ... </VirtualHost> <VirtualHost _default_:*> DocumentRoot /www/default ... </VirtualHost>ポート 80 (ワイルドカードのポートでデフォルトのバーチャルホストの前になければならない)のデフォルトのバーチャルホストは、指定されていない IP アドレスに送信される全てのリクエストを捕らえます。メインサーバはリクエストを与えるためには決して使われません。
サーバコンフィギュレーション:
... <VirtualHost _default_:80> DocumentRoot /www/default ... </VirtualHost>ポート 80 で、指定されていないアドレスへのリクエストは、指定されていないアドレスへのデフォルトのバーチャルホストのなんらかのリクエストから与えられます。
VirtualHost
命令に新しい IP アドレス(111.22.33.66)を追加することができるからです。
サーバコンフィギュレーション:
... Port 80 ServerName www.domain.tld DocumentRoot /www/domain NameVirtualHost 111.22.33.55 <VirtualHost 111.22.33.55 111.22.33.66> DocumentRoot /www/otherdomain ServerName www.otherdomain.tld ... </VirtualHost> <VirtualHost 111.22.33.55> DocumentRoot /www/subdomain ServerName www.sub.domain.tld ServerAlias *.sub.domain.tld ... </VirtualHost>バーチャルホストは新しいアドレス(IP-based のバーチャルホストとして)と古いアドレス(name-based のバーチャルホストとして)を通してアクセスされます。
ServerPath
命令の使用Host:
ヘッダを送信しなければなりません。古い HTTP/1.0 クライアントはそのようなヘッダを送信せず、Apache にはクライアントが行こうとしているバーチャルホストの手がかりがありません(そして最初のバーチャルホストからのリクエストを与えます)。可能な限りの互換性を提供するために、name-based のバーチャルホストに対する URL prefix とのリンクを含んだ単独のページを実行する、第一のバーチャルホストを作ります。
サーバコンフィギュレーション:
... NameVirtualHost 111.22.33.44 <VirtualHost 111.22.33.44> # primary vhost DocumentRoot /www/subdomain RewriteEngine On RewriteRule ^/.* /www/subdomain/index.html ... </VirtualHost> <VirtualHost 111.22.33.44> DocumentRoot /www/subdomain/sub1 ServerName www.sub1.domain.tld ServerPath /sub1/ RewriteEngine On RewriteRule ^(/sub1/.*) /www/subdomain$1 ... </VirtualHost> <VirtualHost 111.22.33.44> DocumentRoot /www/subdomain/sub2 ServerName www.sub2.domain.tld ServerPath /sub2/ RewriteEngine On RewriteRule ^(/sub2/.*) /www/subdomain$1 ... </VirtualHost>ServerPath
命令のせいで、URL http://www.sub1.domain.tld/sub1/ に対するリクエストは sub1-vhost から常に与えられます。
URL http://www.sub1.domain.tld/ に対するリクエストは、クライアントが正しいHost:
ヘッダを送信すれば、sub1-vhost からのみ与えられます。もしHost:
ヘッダが送信されていなければ、クライアントは第一のホストからインフォメーションページを得ます。
一つの oddity があることに注意してください: http://www.sub2.domain.tld/sub1/ に対するリクエストは、もしクライアントがHost:
ヘッダを送信していなければ、sub1-vhost から与えられます。
RewriteRule
命令は、正確なHost:
ヘッダを送信するクライアントが両方の URL の違い、すなわち URL prefix があるかないかを使っていることを確認するために使います。