apacheのデフォルトのバーチャルホスト

デフォルトではコメントアウトされている以下の設定を有効にすることで、apacheでバーチャルホストを使用することができます。

NameVirtualHost *:80

各<VirtualHost>の項目でServerNameを指定することで、特定の名前でアクセスされた時のDocumentRootなどの設定を分けることが可能になるわけです。

明示的に設定されていない名前やIPアドレス直打ちなどでアクセスされたときにはどうなるのでしょうか。直観的に<VirtualHost>の外側で設定されているDocumentRootなどの設定を使用してくれるのではと思っていたのですが、実際は違いました。

一番最初に定義されている<VirtualHost>の設定が使用されるのです。

これだけだと特に問題でもないのですが、デフォルトのhttpd.confではバーチャルホスト関連の設定が一番最後に書いてあるのが若干問題となります。

conf.dの仕組みを利用してバーチャルホストごとに設定ファイルを分けたいと考えるのは割と自然だと思いますが、conf.dの設定ファイルの読み込みはhttpd.confの中では真ん中あたりにあります。

したがって、httpd.confのバーチャルホストの設定の部分でデフォルトの<VirtualHost>の設定をしたつもりになっていても、実際にはconf.dの中で一番最初に読み込まれた(ファイル名が早かった)<VirtualHost>の設定がデフォルトの設定となるのです。

これ問題ではまらないための無難な方法としてはNameVirtualHostおよびデフォルトの<VirtualHost>の設定をconf.dの読み込みの上に移動することだと思います。