ApacheのVirtualHost機能とは、1つのWebサーバーで複数の異なるドメインのWebページを
公開するために利用出来るものです。例えば、「hogehoge.com」と「foofoo.com」を同じ1Web
サーバー上に共存させることが出来るものです。
今回は、
VirtualHostの設定が有効にならず
ディフォルトのDocumentRootを見てしまう問題
に直面したので書いてみます。
VirtualHostってどーやるんちゃ?
ApacheのDocumentRootが/var/www/html/であって、
「hogehoge.com」を/home/hogehoge/www/html/で公開したい場合、VirtualHostの設定を
以下のようにし、Apacheの再起動を行えば公開できる。あくまでも例ですよ。
<VirtualHost *:80> ServerName hogehoge.com ServerAdmin root@hogehoge.com ServerAlias www.hogehoge.com DocumentRoot /home/hogehoge/www/html ErrorLog logs/hogehoge/error_log CustomLog logs/hogehoge/access_log combined </VirtualHost>
上記のように設定しApacheの再起動を行えば、「hogehoge.com」と「www.hogehoge.com」で
/home/hogehoge/www/html/内部のコンテンツを公開できる。
しかし、このように設定したのにVirtualHostの設定を見てくれない場合は、/etc/hostsを確認しよう。
Apacheは起動時に/etc/hostsを参照し、名前解決情報を保持します。ここで保持する名前解決情報とは
サーバー自信のIPアドレスの逆引が何であるか
です。
/etc/host.confにあるとおりの順番で、Apacheは起動する際にhostsファイルを参照し、そこで解決が
出来なければDNSへの問い合わせを行うようになっております。
/etc/host.confの内容
order hosts,bind
さて、サーバーのIPアドレスが「111.222.333.444」と仮定し、/etc/hostsに以下の記述があるとします。
111.222.333.444 hogehoge.com
この記述がある状態でApacheを起動すると、Apacheは
私111.222.333.444は、『hogehoge.com』です
というサーバーのIPアドレスの逆引情報を保持します。
この状態で「hogehoge.com」にアクセスをするとApacheのディフォルトのDocumentRoot(/var/www/html/)
を見に行ってしまいます。VirtualHostの設定を見る前に、Apacheが認識している自分自身と合致するためです。
したがって、AapcheでVirtualHostの公開をされたい場合は以下の手順をお試しください。
1.ドメインの名前解決先をサーバーのIPアドレスに向ける 2.VirtualHostの設定をする 3./etc/hostsに「IPアドレス VirtualHostのドメイン」の記述が上位にないことを確認 4.Apacheの起動
もしくは、/etc/host.confを編集し、hostsファイルを参照せずに優先的にDNSで名前解決を行わさせる
ことにより回避することも出来ます。
# cat /etc/host.conf #order hosts,bind order bind,hosts #
バーチャルホストという用語は、1 台のマシン上で (
www.company1.com
andwww.company2.com
のような) 二つ以上のウェブサイトを扱う運用方法のことを指します。 バーチャルホストには、各ウェブサイトに違う IP アドレスがある 「IP ベース」と、それぞれの IP アドレスに 複数の名前がある「名前ベース」とがあります。 複数のサイトが物理的に同じサーバで扱われている、ということはエンドユーザには 明らかではありません。Apache は、特に手を入れない状態で IP ベースのバーチャルホスト をサポートした最初のサーバの一つです。バージョン 1.1 以降の Apache では、IP ベースとネームベースのバーチャルホストの両方をサポート しています。ネームベースのバーチャルホストは、ホストベースあるいは 非 IP ベースのバーチャルホストと呼ばれることもあります。
以上
コメント