ローカルの開発環境で、毎回面倒だなーと思うのがバーチャルホストの設定。 Apacheの場合、管理するサイトが増えるたびに次の2つの手順を踏むと思います。
- 開発サーバ内に新規ホスト用の作業ディレクトリを作成
- Apacheの設定ファイル
httpd-vhosts.conf
に新規ホストの設定を追加 hosts
ファイルに新規ホスト名を追加
hostsファイルは「管理者で実行」が必要で設定自体が手間だし、管理するサイトが増えると2つの設定ファイルはなかなかカオスな状況になります。こんな感じで…
「もっと簡単にバーチャルホストを追加したい!何とかならんのかいっ」ということで、できました。これを実装すると、新しいホスト用の作業ディレクトリを作るだけでネームベースのバーチャルホストを使う事ができるようになります。
これには、2つの技術(サービス)を利用します。
- ApacheのVirtualDocumentRoot
- 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