INDEX
[Apache]名前ベースのバーチャルホスト
1  NI-Lab.  2003/06/21(Sat) 16:45
[Apache]名前ベースのバーチャルホスト(Apache name-based Virtual Host)

バーチャルホストは、1台のサーバで複数のWebサーバを立てる手法。
名前ベースというのは、異なるホスト名(IPアドレスは同じ)でアクセスしてきたら、それぞれ別のWebサーバに見せる方法。
2  NI-Lab.  2003/06/21(Sat) 16:53
http://www.atmarkit.co.jp/flinux/rensai/apache08/apache08a.html
http://www.atmarkit.co.jp/flinux/rensai/apache08/apache08b.html
バーチャルホストによる複数サイトの同時運用

>バーチャルホストを利用するに当たって、検討しておかなければならないことがある。バーチャルホストには、「NAMEペース」「IPベース」という2種類の方式があるのだ。1つのIPアドレスで実現できるのが「NAMEベースのバーチャルホスト」、複数のIPアドレスを単一のApacheで処理するのが「IPペースのバーチャルホスト」で、それぞれメリット/デメリットがある。

「IPペース」は「IPベース」の誤りだと思われ。

>NAMEベースのバーチャルホストには、大きな弱点が存在する。クライアント(Webブラウザやプロキシ)が、NAMEベースのバーチャルホストに対応していなければならないということである。つまり、アクセスしているサーバのホスト名をサーバに送り返す機能がクライアントに実装されていないと、NAMEベースのバーチャルホストが機能しないのである。最近のクライアントであれば問題ないが、一部の古いWebブラウザやプロキシはホスト名を送り出さずにIPアドレスだけをサーバに送信する。すると、サーバはどのホストへのアクセスなのかが判断できないことになる。

>NameVirtualHostディレクティブを使って複数のホスト名で共有するIPアドレスを示さなくてはならない。

>以下の例は、192.168.1.11でwwwとlinuxの2つのホスト名を利用する場合の設定例だ。
>
>NameVirtualHost 192.168.1.11
>
><VirtualHost 192.168.1.11>
>ServerName www.atmarkit.co.jp
>DocumentRoot /www/httpd/www
>ServerAdmin webmaster@www.atmarkit.co.jp
>ErrorLog logs/error_log
>TransferLog logs/access_log
></VirtualHost>
>
><VirtualHost 192.168.1.11>
>ServerName linux.atmarkit.co.jp
>DocumentRoot /www/httpd/linux
>ServerAdmin linuxmaster@www.atmarkit.co.jp
>ErrorLog logs/linuxerror_log
>TransferLog logs/linuxaccess_log
></VirtualHost>

>ところで、NAMEベースのバーチャルホストを構築しているサイトに、IPアドレスでアクセスしたらどうなるだろうか? 答えは、「最初に記述されたブロックの設定が使われる」である。つまり、上記の例の場合はwwwというホストとして処理されるのである。バーチャルホストを構築する場合は、デフォルトとして機能するホストを最初に記述するようにしよう。

3  NI-Lab.  2003/06/21(Sat) 16:53
http://snap.shot.cx/ZWiki/NameVirtualHost
Non-IPベースのバーチャルホスト

>さらに、あまり知られていないが:
>
> NameVirtualHost *
>
>というワザも使える。 通常の例(NameVirtualHostにIPアドレスを指定するやり方)だと動的IPの対処ができない。で、 「どんなIPでもバーチャルドメイン扱いしなさいよ〜」 というためのおまじないがこれ。
>
>もちろんVirtualHostディレクティブも、IPアドレスを指定する代わりにこうする:
>
> <VirtualHost *>
> </VirtualHost>

4  NI-Lab.  2003/06/21(Sat) 16:53
http://www.nilab.info/docs/Apache1.3/vhosts/name-based.html
名前ベースと IP ベースのバーチャルホストの比較

>NameVirtualHost ディレクティブで IP アドレスを書いても、 自動的にサーバがその IP アドレスをリッスンするということはないことに 注意してください。

>たとえば、www.domain.tld と www.otherdomain.tld の両方が 1つの IP アドレスを指しているとしましょう。そのような場合は、 httpd.conf に以下のようなコードを追加するだけです
>
> NameVirtualHost *
>
> <VirtualHost *>
> ServerName www.domain.tld
> DocumentRoot /www/domain
> </VirtualHost>
>
> <VirtualHost *>
> ServerName www.otherdomain.tld
> DocumentRoot /www/otherdomain
> </VirtualHost>
>
>NameVirtualHost 及び <VirtualHost> のどちらの場合も、 * の部分には明示的に IP アドレスを指定することができます。 バージョン 1.3.12 以前では IP アドレスの指定が必要でした。

>上で書いたように、名前ベースのバーチャルホストが正しく動作する ために必要な情報を送ってこないクライアントが依然として存在しています。 そのようなクライアントに対しては、該当する IP アドレスについて、 一番最初に設定されているバーチャルホスト (プライマリの名前ベースのバーチャルホスト) からページが送り返されます。

5  NI-Lab.  2003/06/21(Sat) 17:02
うちのローカルPC kohaku の設定
http://kohaku/ -> /usr/local/apache/htdocs
http://kohaku2/ -> /usr/local/apache/htdocs2
問題なく見れた。

#
# Use name-based virtual hosting.
#
NameVirtualHost *

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#
<VirtualHost *>
DocumentRoot /usr/local/apache/htdocs
ServerName kohaku
</VirtualHost>

<VirtualHost *>
DocumentRoot /usr/local/apache/htdocs2
ServerName kohaku2
</VirtualHost>

6  NI-Lab.  2003/06/22(Sun) 15:44
RewriteEngine と RewriteRule は、
VirtualHostの内に含めないと動作しなかった。

↓こんな感じ

<VirtualHost>
RewriteEngine on
RewriteRule hogehoge
<VirtualHost>

7  NI-Lab.  2003/06/22(Sun) 16:08
>>6に関する証言その1:

http://www2.osk.3web.ne.jp/~lunlumo/bibo/non_tilde.html
~無しでのユーザーDirectory参照

>httpd.conf内の、(VirtualHost等の)対象領域の設定部分に以下の記述を加える。
>#mod_rewriteの説明を見る限り、ServerConfigとして全体に適用させる事が出来そうなのだが、どうも出来ない様だ。

8  NI-Lab.  2003/06/22(Sun) 16:09
バーチャルホストを2つ設定しておいて、
片方へのアクセスを、自動的にもう片方へ飛ばす。
でも、これって、URLが変わったことに気づいてもらえないと思う。

http://kamoland.com/comp/urlchange.html
URL引っ越しをスムーズに

http://kamoland.com/comp/urlchange2.html
URL引っ越しをスムーズに(続編)

><VirtualHost kamoland.no-ip.com>
> ServerName kamoland.no-ip.com
> RewriteEngine on
> RewriteRule ^/(.*) http://kamoland.com/$1 [L,R]
></VirtualHost>
>
>これまで
>
> * (旧) http://kamoland.no-ip.com
>
>というURLでアクセスしてくれていた人々を,
>
> * (新) http://kamoland.com
>
>というURLに変換するわけですが,上記のRewriteRuleで実現できます.