Apacheのバーチャルホストを設定した時の直IP接続を拒否する方法

Apacheにバーチャルホストの設定をすると複数のドメインでの運用ができるようになります。ただユーザーがドメインではなくIPアドレスを直に指定してApacheにアクセスした場合、バーチャルホストの一番最初に記載されている設定が有効になります。

具体的な例で説明します。1台のWEBサーバーで www.example.com と www.hogehoge.com の2つのサイトを運営していたとします。このWEBサーバーのIPのアドレスが 192.168.1.28 だった場合、ユーザは以下のURLでアクセスができます。

http://www.example.com/index.html
http://www.hogehoge.com/index.html
http://192.168.1.28/index.html

このときのApacheのバーチャルホストの設定が以下であった場合、

<VirtualHost *:80>
  ServerName www.example.com
  :
</VirtualHost>

<VirtualHost *:80>
  ServerName www.hogehoge.com
  :
</VirtualHost>

「http://192.168.1.28/index.html」でアクセスしたリクエストには www.example.com のWEBページが表示されます(バーチャルホストの設定の先に書かれている方が有効になる)。もし www.example.com と www.hogehoge.com がまったく関係のないWEBページで、ユーザーが www.hogehoge.com を見たくてアクセスしたとしたら別のWEBページが表示されてびっくりするかもしれません。またバーチャルホストを設定して複数のWEBページを運営していることがユーザーに知られてしまいます。

[広告]

ではどうするかと言うと、IPアドレスでアクセスしてきたユーザーには該当するページがないというエラーを表示させるようにします。そもそもIPアドレス直指定でアクセスするユーザーはほとんどいないと思いますが・・。

バーチャルホストの設定の最初に404へのリダイレクトの設定を追加します。以下のような感じです。

<VirtualHost *:80>
    ServerName dummy
    Redirect 404 /
</VirtualHost>

<VirtualHost *:80>
  ServerName www.example.com
  :
</VirtualHost>

<VirtualHost *:80>
  ServerName www.hogehoge.com
  :
</VirtualHost>

これでIPアドレスでアクセスしてきたユーザーにエラー画面を表示させることができます。

なお、このバーチャルホストの設定は ubuntu 18.04 LTS の Apache2(ver.2.4.29)で確認していますが、CentOS の httpd でも動作すると思います。

スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。