VirtualHostを設定時にIP直打ちでアクセスした場合の対処

概要

ApacheでVirtualHostを設定して、VirtualHost毎にWEBページを設定しても、サーバー自体のIPアドレスを直打ちされると意図しないVirtualHost毎にWEBページが表示されます。

これは名前ベースVirtualHostを使用した場合は、サーバにリクエストがくると以下の挙動をおこないます

  1. <NameVirtualHost> のIPアドレスをチェックします
  2. IPアドレスが一致すれば、<VirtualHost> のServerName か ServerAlias を確認します
  3. <VirtualHost>の設定があればその設定に従ってWEBページを表示します

IPアドレスを直打ちすると、 IPアドレスとマッチする<VirtualHost> の設定がない場合は、IPアドレスのリストの最初にあるバーチャルホスト が使用されますこの挙動でApacheが動いているので、サーバー自体のIPアドレスを直打ちされると意図しないVirtualHost毎にWEBページが表示される理由です

参考URL:名前ベースのバーチャルホスト(Apache HTTP サーバ バージョン 2.4)

VirtualHostでIP直打ちでアクセスした意図したページを見せる方法

この対策ですが、「 IPアドレスとマッチする<VirtualHost> の設定がない場合は、IPアドレスのリストの最初にあるバーチャルホスト が使用される」となっているので、最初にダミーページを表示するか、明示的にServerNameのIPアドレスの設定を入れれば指定しているWEBページを表示されます

ダミーページの設定を、NameVirtualHostの先頭にする場合

NameVirtualHostの後に、IP直打ちだと表示したいWEBページの設定を設定します。そうするとIP直打ちで名前解決できなかった場合は、NameVirtualHostの後のVirtualHostの設定を見るので、意図しないページを表示されないようになります

NameVirtualHost 192.168.0.200:80

# IP直打ちだと表示したいWEBページを先頭にもってくる
<VirtualHost 192.168.0.200:80>
  DocumentRoot /var/www/damy/
  ServerName test.example.com

  <Directory  /var/www/damy>
    AllowOverride All
    Options Includes ExecCGI FollowSymLinks
    Require all granted
  </Directory>
</VirtualHost>

# 通常のWEBページをIP直打ち用の後に設定する
<VirtualHost 192.168.0.200:80>
  DocumentRoot /var/www/html/
  ServerName www.example.com

  <Directory  /var/www/html>
    AllowOverride All
    Options Includes ExecCGI FollowSymLinks
    Require all granted
  </Directory>
</VirtualHost>

IPアドレスをVirtualHostに設定する場合

IPアドレスをVirtualHost内の「ServerName」に設定すれば、IPアドレスで名前解決されIP直打ちでもそのアドレスの設定があるので、そのページが表示されます

NameVirtualHost 192.168.0.200:80

# ServerNameのIPアドレスを設定する
<VirtualHost 192.168.0.200:80>
  DocumentRoot /var/www/damy/
  ServerName  192.168.0.200

  <Directory  /var/www/damy>
    AllowOverride All
    Options Includes ExecCGI FollowSymLinks
    Require all granted
  </Directory>
</VirtualHost>

スポンサーリンク