VirtualHostを設定時にIP直打ちでアクセスした場合の対処
概要
ApacheでVirtualHostを設定して、VirtualHost毎にWEBページを設定しても、サーバー自体のIPアドレスを直打ちされると意図しないVirtualHost毎にWEBページが表示されます。
これは名前ベースVirtualHostを使用した場合は、サーバにリクエストがくると以下の挙動をおこないます
- <NameVirtualHost> のIPアドレスをチェックします
- IPアドレスが一致すれば、<VirtualHost> のServerName か ServerAlias を確認します
- <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>
ディスカッション
コメント一覧
まだ、コメントがありません