ApacheのVirtualHostと/etc/hostsの関係

スポンサーリンク


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
#

参考:Apache バーチャルホスト説明書

バーチャルホストという用語は、1 台のマシン上で (www.company1.com and www.company2.com のような) 二つ以上のウェブサイトを扱う運用方法のことを指します。 バーチャルホストには、各ウェブサイトに違う IP アドレスがある 「IP ベース」と、それぞれの IP アドレスに 複数の名前がある「名前ベース」とがあります。 複数のサイトが物理的に同じサーバで扱われている、ということはエンドユーザには 明らかではありません。

Apache は、特に手を入れない状態で IP ベースのバーチャルホスト をサポートした最初のサーバの一つです。バージョン 1.1 以降の Apache では、IP ベースとネームベースのバーチャルホストの両方をサポート しています。ネームベースのバーチャルホストは、ホストベースあるいは 非 IP ベースのバーチャルホストと呼ばれることもあります。

以上

上に戻る

コメント

タイトルとURLをコピーしました