VirtualDocumentRootとxip.ioでバーチャルホストの追加をお手軽に(vhostの追加とhostsファイルの更新はもういらない)

ローカルの開発環境で、毎回面倒だなーと思うのがバーチャルホストの設定。 Apacheの場合、管理するサイトが増えるたびに次の2つの手順を踏むと思います。

  1. 開発サーバ内に新規ホスト用の作業ディレクトリを作成
  2. Apacheの設定ファイル httpd-vhosts.conf に新規ホストの設定を追加
  3. hosts ファイルに新規ホスト名を追加

hostsファイルは「管理者で実行」が必要で設定自体が手間だし、管理するサイトが増えると2つの設定ファイルはなかなかカオスな状況になります。こんな感じで…

バーチャルホストの設定だらけ

「もっと簡単にバーチャルホストを追加したい!何とかならんのかいっ」ということで、できました。これを実装すると、新しいホスト用の作業ディレクトリを作るだけでネームベースのバーチャルホストを使う事ができるようになります。

これには、2つの技術(サービス)を利用します。

  1. ApacheのVirtualDocumentRoot
  2. xio.ip(ワイルドカードDNSサービス)

ApacheのVirtualDocumentRoot

通常、バーチャルホストを設定する場合は、1つのホストに対して1つのドキュメントルートを設定する必要があります。(Apache2.2系と2.4系ではディレクティブの設定が異なるので注意してください。下記は2.4系です。)

この場合、ホストを増やすと設定も追加しないといけません。
VirtualDocumentRootを使うとこの記述が不要になります。

VirtualDocumentRootの設定

VirtualDocumentRootを使うためにはvhost_alias_moduleが必要なので、モジュールを読み込むように設定を変更します。httpd.conf L.174あたり。コメント#を削除。

# httpd.conf
LoadModule vhost_alias_module modules/mod_vhost_alias.so

次に、httpd-vhosts.confの通常のバーチャルホスト設定を削除して次に書き換え。

このとき、ドキュメントルートに指定されている%0にはFQDN全体が補間されるので、次のような作業ディレクトリを作るだけで、それらが個々のDocumentRootとして機能するようになります。

C:/var/www/dev.sample1.com/html
C:/var/www/dev.sample2.com/html
C:/var/www/dev.sample3.com/html

この状態で、確認のため hosts ファイルに次の指定を追加し「dev.sample1.com」にアクセスするとC:/var/www/dev.sample1.com/html/index.htmlが見られるはずです。

127.0.0.1  dev.sample1.com

これでhttpd-vhosts.confの都度設定は不要になりましたが、まだ都度 hosts 設定を追加する必要があるので、ワイルドカードDNSサービスを使ってここも作業フリーにします。

ワイルドカードDNSサービス「xip.io」

xip.ioのサイト:xip.io: wildcard DNS for everyone

以前に知ったときはよく分からず、あまりにも簡潔なので??となりましたが、活用方法が分かった途端「これすごいっ」ってなりました。

xip.ioは独自のDNSサーバを持っていて、xip.ioのドメイン名にIPアドレスを含んで参照した場合に、ドメイン名に含まれているIPアドレスを返す のです。つまり、次のようなイメージ。

sample1.127.0.0.1.xip.io にアクセス → 127.0.0.1 を返す
sample2.127.0.0.1.xip.io にアクセス → 127.0.0.1 を返す

これが、hosts 設定の変わりになるということです。xip.io 用の設定は一切なし。ただブラウザでアクセスするだけ。よく出来てるーー。

そこで、このサービスと上の VirtualDocumentRootを組み合わせて使えばいいんじゃない??となるのです。

組み合わせて使う

ここまで来ると後は簡単。作業用のディレクトリ名を、xip.io の参照アドレスにあわせるだけです。先ほどの例だと次のような感じ。

C:/var/www/dev.sample1.com/html
C:/var/www/dev.sample2.com/html
C:/var/www/dev.sample3.com/html

 ↓これを次のようなディレクトリ名にする

C:/var/www/sample1.127.0.0.1.xip.io/html
C:/var/www/sample2.127.0.0.1.xip.io/html
C:/var/www/sample3.127.0.0.1.xip.io/html

これで終わり。
ブラウザで「sample1.127.0.0.1.xip.io」にアクセスすると、自分のマシン(127.0.0.1)を参照します。そのときにVirtualDocumentRootの機能によりC:/var/www/sample1.127.0.0.1.xip.io/htmlがドキュメントルートになる、という仕組みです。

これで、今後はC:/var/www/******.127.0.0.1.xip.io/htmlという作業ディレクトリを作るだけで、ポコポコとバーチャルホストが使えます。ApcheのVirtualDocumentRootも、xip.ioも目新しい機能やサービスじゃないので「いまさら?」かもしれないけど、全然気付いてなかったので久しぶりにテンションが上がりましたw