「Apacheのバーチャルホストの設定」でバーチャルホストの設定をしましたが、ローカルPCにインストールしたApacheでバーチャルホストが正しく動作しているかの確認方法です(独自ドメインを取得せず、ローカル環境だけでバーチャルホストの確認をしたい場合です)。
ubuntu 18.04 LTS + Apache 2.4.29 の組み合わせです。
バーチャルホストの設定で、以下とした場合。
#バーチャルホストの設定1
<VirtualHost *:80>
:
ServerName test.example1.com
:
</VirtualHost>
#バーチャルホストの設定2
<VirtualHost *:80>
:
ServerName test.example2.com
:
</VirtualHost>
URLのアクセスは以下となります。
http://test.example1.com/
http://test.example2.com/
ただこのままだと「test.example1.com」はDNSでの名前解決ができずエラーとなってしまいます。そこで名前解決にはDNSではなくhostsファイルを使用するようにします。DNSとhostsファイルの優先順位を確認するため、host.confとnsswitch.confの内容を確認します。
S su –
#
# cd /etc
# cat host.conf
==============================
(host.confの内容)
# The "order" line is only used by old versions of the C library.
order hosts,bind ←※ここを見る
multi on
==============================
# cat nsswitch.conf
==============================
(nsswitch.confの内容)
:
hosts: files mdns4_minimal [NOTFOUND=return] dns myhostname ←※ここを見る
:
==============================
上記の場合、DNSよりhostsファイルが優先されるようになっています(ubuntuをインストールしたデフォルトの状態は上記になっていると思います)。host.confとnsswitch.confですが、旧版がhost.confで、nsswitch.confに置き換わりつつあるようです。ただ、ubuntuがどちらを見て動作しているかはわからなかったので両方確認してみました。
次に、hostsファイルの設定です。
# cd /etc
# vi hosts
==============================
(hostsファイルに以下を追加する)
127.0.0.1 test.example1.com
127.0.0.1 test.example2.com
(hostsファイルを保存する)
==============================
ここまでの設定が終わればブラウザのURLに「http://test.example1.com/」を入力することで、ローカルPCのApacheにアクセスが行われます。
ちなみに裏の仕組みについてですが、僕の理解の範囲で補足しておきます。
そもそもApacheがServerNameに設定したサーバ名を取得することができるのは、HTTPヘッダにあるHostフィールドにブラウザがリクエスト先のサーバ名を設定して送信しているからです。HostフィールドはHTTP/1.1から追加され、1.1では唯一の必須フィールドとなっています。
「http://www.example1.com/」をブラウザのURLに入力した場合、サーバに対してリクエストが行われるのですが、Hostフィールドには「www.example1.com」が設定されるためサーバ側のApacheはどのサーバ宛て(どのServerName宛て)かを判断できます。