バーチャルホストの動作をローカル環境で確認する方法

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宛て)かを判断できます。

findとgrepで特定の文字列を含むファイルを抽出する。

find と grep を組み合わせて、カレントディレクトリ配下にあるファイルから特定の文字列を含むファイルを抽出することができます。

■手順

1.検索したいディレクトリまで移動
$ cd (検索対象としたいディレクトリ)

2.以下のコマンドで抽出
$ find . -type f -name '*' | xargs grep (検索したい文字列)

$ find . -type f -name '*' | grep (検索したい文字列) とすると(xargsがないと)期待通りの結果になりません。findから渡されるのは見つけ出したファイルの「リスト」であるため、リスト自体を grep してしまうことになります。

上記は、ubuntu 18.04 LTS で動作確認しました。