TL;DR
- Webサーバーのバーチャルホスト設定がしたいけれど、DNSレコードの登録や
hosts
の設定は面倒… - そんな時に、ワイルドカードDNSサービスが便利かも?
フリーなワイルドカードDNSサービス
xip.ioやnip.ioあたりが有名どころで、IPアドレスを含んだドメイン名でアクセスすると、その指定したIPアドレスを返してくれるサービスです。
Free wildcard DNS services for IP addresses
nip.ioのトップページに例があるので、ちょっと見てみましょう。
・ 10.0.0.1.nip.io maps to 10.0.0.1
・ 192-168-1-250.nip.io maps to 192.168.1.250
・ app.10.8.0.1.nip.io maps to 10.8.0.1
・ app-37-247-48-68.nip.io maps to 37.247.48.68
・ customer1.app.10.0.0.1.nip.io maps to 10.0.0.1
・ customer2-app-127-0-0-1.nip.io maps to 127.0.0.1
こんな感じで、指定されたIPアドレスに名前解決してくれます。
なにが嬉しいの?
バーチャルホストを必要とするシステムを開発していたり、テストしたりしていると、Webサーバーのバーチャルホストに指定する名前自体の名前解決をどうしようか、けっこうな悩みの種になります。
- DNSレコードを登録するのは…
- そもそもDNSサーバーは…
- いいや、もう
hosts
に書いてしまえ
といったことを、よくやっているのでは?
そんな時に、こういったサービスを利用すると便利かもしれません。
例
例えば、以下のようなバーチャルホスト設定を持つApacheを用意します。
<VirtualHost *:80>
ServerName foo.172.17.0.2.nip.io
DocumentRoot /var/www/foo
</VirtualHost>
<VirtualHost *:80>
ServerName bar.172.17.0.2.nip.io
DocumentRoot /var/www/bar
</VirtualHost>
<VirtualHost *:80>
ServerName hoge.172.17.0.2.nip.io
DocumentRoot /var/www/hoge
</VirtualHost>
ドキュメントルート直下のファイルを作成。
$ cd /var/www/
$ sudo mkdir foo bar hoge
$ sudo echo foo > foo/index.html
$ sudo echo bar > bar/index.html
$ sudo echo hoge > hoge/index.html
確認。Apacheの動作しているIPアドレスは、172.17.0.2
とします。
$ curl foo.172.17.0.2.nip.io
foo
$ curl bar.172.17.0.2.nip.io
bar
$ curl hoge.172.17.0.2.nip.io
hoge
注意点
xio.ip
はサービスダウンすることで有名らしいですが、このエントリを書いていた時も落ちていました…。
そういう場合は、xip.io
やnip.io
を自前で立てるとよいみたいです。
しかしですね、自前で立てるとそのDNSサーバーにどうやってアクセスするのかという話がまた(略)。
あと、インターネットアクセスがプロキシサーバー下だと、名前解決だけでなく実際のアクセスもプロキシサーバーが行ってしまうので、悲しい結果になります…。