なぜ設定していないサブドメインにアクセスできるのか

レンタルサーバなどでは、設定していないサブドメインにアクセスしてもネットワークエラーにはならず、以下のようなページが表示されます。今回は、設定していないサブドメインにアクセスできる理由と実装方法を解説します。
kazoo04.net – このドメインはお名前.comで取得されています。

どうしてつながる?

存在しないアドレスにアクセスした場合には、ブラウザ側でこのようなエラーが出ます。
ページ読み込みエラー
これは、どこを探しても指定されたアドレスに対するIPアドレスが見つからなかった事を意味します。つまり、設定していないサブドメインにアクセスできるという事は、どこかのDNSサーバにIPアドレスが記載されているという事になります。
無効なURLです
その秘密となるのがワイルドカードです。

ワイルドカード

今回はドメインの例として「alias.test」を使用して行きます。
DNSサーバではワイルドカードを用いてレコードを記述する事が出来ます。Aレコードで「*.alias.test」の形でホストを指定すると、「alpha.alias.test」や「bravo.alias.test」など、どんなサブドメインでも同じIPアドレスとして設定する事が出来るのです。
File1
次に、サーバ側を設定します。今回のサーバ環境はUbuntu13.10 + Apache2.4.6 です。Debian系のApacheは一般的なApacheと設定の仕方が違うので注意が必要です。また、「NameVirtualHost」はApache2.4で廃止されています。
まず、設定していないサブドメインにアクセスした際に表示させるサイトをバーチャルホストとして作成します。ServerNameは「undefined.test」にでもしておきましょう。
そして、ディレクティブ内に「ServerAlias *.alias.test」のように、ワイルドカードを用いてアドレスを記載します。「ServerAlias」に記載したアドレスは「ServerName」に対する別名として扱われるので、「alpha.alias.test」や「bravo.alias.test」にアクセスした場合でも「undefined.test」の設定にもとづいてページを表示してくれます。
もちろん、バーチャルホストとして「charlie.alias.test」のようにサブドメインの設定を追加すれば、そちらが優先されます。
File2
これで、設定していないサブドメインにアクセスした際に、任意のサイトを表示させる事が出来るようになります。404ページのように遊び心のあるコンテンツを用意しても良いかもしれません。

サブドメインなしの場合も

使う機会が思いつきませんが、サブドメインなしの場合も同じページにアクセスさせることができます。「ServerAlias alias.test *.alias.test」と設定することで、「alias.test」にアクセスした場合でもデフォルトのページを表示します。ただ、「alias.test」をバーチャルホストとして設定した際に、「undefined.test」よりも優先度が高くなるようにしておかないと、常にデフォルトのページを表示するようになってしまいます。Debian系ではバーチャルホストの設定名順で並べ替えられるので、「undefined.test」の設定名を「vvv-undefined.test」にしておくことで「undefined.test」の優先度を下げることができます。その他ディストリビューションの場合は「undefined.test」を「alias.test」よりも下に記載すれば大丈夫です。また、サブドメインなしのドメインはワイルドカードを使用したDNSレコードとは別に「alias.test」のように登録しておく必要があります。
名前ベースのバーチャルホスト - Apache HTTP サーバ
Debian における Apache のバーチャルホストの優先度について - はてダ

なぜ設定していないサブドメインにアクセスできるのか」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>