Apacheのバーチャルホストとユーザディレクトリの共存

Apacheを使ったサーバ1台で、複数サイトを同時運用したい場合に使えるのがバーチャルホスト機能です。IPアドレスが1つしか使えない状況下では、ドメイン名ベースで見せるページを振り分けることができます。バーチャルホスト機能は非常に便利なのですが、ここで問題が一つ発生します。それは、


「UserDir機能との共存ができない」


というものです。UserDir機能は、public_html以下のフォルダをチルダ+ユーザ名で公開することで、複数ユーザのページを扱う際の手間を一気に解消できる機能です。しかし、バーチャルホストと併用することでゴースト現象が発生してしまいます。ゴースト現象とは、その「チルダ+ユーザ名」が本来のドメイン以外からでもアクセスできてしまうことを言います。本来の
http://ex000.com/~user でアクセスするものが、
http://ex111.com/~user からでもアクセスできてしまうのです。


本題の解決策ですが、httpd.confでUserDir機能を使用していた場所をコメントアウトし、UserDirを使用したいバーチャルホスト内でのみ指定を行う ことで問題を回避することができます。


なお、バーチャルホストでドメイン名ベースでの指定を行ったサーバに対して、IPアドレスでアクセスを行った場合には、httpd.confのバーチャルホストの一番上で設定したホストが実行されます。


【設定例】

(httpd.confファイル)


NameVirtualHost *:80



  ServerName ex000.com
  DocumentRoot /home
  UserDir public_html




  ServerName ex111.com
  DocumentRoot /www/htdocs



そもそもの原因は、「通常のUserDir指定だと、適用範囲がバーチャルホスト全体になってしまうから」のようです。しかし、バーチャルホスト内で宣言を行うことで、UserDirを使うドメイン、使わないドメインと切り分けることができます。


なお、バーチャルホストでドメイン名ベースでの指定を行ったサーバに対して、IPアドレスでアクセスを行った場合には、httpd.confのバーチャルホストの一番上で設定したホストが実行されます。今回の設定例だと ex000.com が実行されることになります。


【ゴースト現象に関する参考URL】