デフォルトバーチャルホストを無効にする
サーバー構築も一段落してきて、だんだんネタがなくなってきました。なので、今後は細かい Tips なんかも書いていこうかと思っています。その第一弾として、今日は Apache のデフォルトバーチャルホスト("/etc/apache/"vhosts.d/00_default_vhost.con" で定義されているもの)を無効にする方法をご紹介します。
Apache はバーチャルホストとして定義されていないホスト名によるリクエストを受け取った場合、最初に定義されたバーチャルホストがアクセスされたと解釈します。つまりデフォルトの状態では、"00_default_vhost.conf" で定義したホストが表示されてしまうわけです。"/var/www/localhost/htdocs" にメインのサイトを構築するのならよいのですが、そうでない場合は問題になります。"/etc/apache/"vhosts.d/00_default_vhost.con" を書き換えるという手もありますが、どうせなら無効にして新たにホストを定義するほうがよいでしょう。
デフォルトバーチャルホストを無効にする
"00_default_vhost.conf" の中を覗いてみると、ホスト定義全体が <IfDefine DEFAULT_VHOST> というディレクティブで囲まれています。つまり、DEFAULT_VHOST というシンボルが定義されていなければ、デフォルトバーチャルホストは無効になるわけです。
このシンボルは、"/etc/conf.d/apache2" の APACHE2_OPTS という設定で定義されています。インストール直後の状態では、この設定は以下のようになっているはずです。
APACHE2_OPTS="-D DEFAULT_VHOST"
これを空文字にすれば OK です。
APACHE2_OPTS=
もし他のオプションが追加されていた場合は、"-D DEFAULT_VHOST" の部分だけを削除してください。
その後、Apache を再起動すればデフォルトバーチャルホストが無効になります。
/etc/init.d/apache2 restart
この後、定義されていないホスト名によるリクエストが来た場合には、定義されているバーチャルホストのうち優先度がもっとも高いもの(ホスト定義ファイル名の最初の 2 桁の数字が最も小さいもの)が使用されます。ですので、デフォルトバーチャルホストとして使用したいバーチャルホストの優先順位がもっとも高くなるように、あらかじめ設定しておきましょう。
未定義ホストへのアクセスを禁止する
もし、バーチャルホストとして定義していないホスト名へのアクセスを禁止したい場合は、ダミーのデフォルトバーチャルホストを定義して、そこへのアクセスを完全に禁止するのが良いと思います。
例えば、"01_dummyhost_vhost.con" などのファイル名で以下のようなホスト定義を作成します。
<VirtualHost *:80> ServerName dummy <Location /> Order deny,allow Deny from All </Location> </VirtualHost>
他のバーチャルホストの優先順位は 02 以下になるようにしてください。これで Apache を再起動すれば、定義されていないホスト名によるアクセスや IP アドレスによるアクセスに対しては、403 Forbidden のエラーが返るはずです。
これで、デフォルトバーチャルホストが自由に定義できるはずです。複数のバーチャルホストを定義する際には、活用してください!(^^)
詳しくはこちらの記事をどうぞ!
この記事にコメントする