我有以下的Apacheconfiguration:
ServerName mydomain.com <VirtualHost 1.2.3.4:80> # contains my IP NameVirtualHost 1.2.3.4 # contains my IP ServerName mydomain.com </VirtualHost>
我的假设是,只有mydomain.com的请求应该去虚拟主机。 不幸的是,即使对IP地址(上面代码中的1.2.3.4)的请求也由VHOST处理。
1)什么是正确的程序区分IP和主机?
2)将请求指向IP的正确方法是什么?即403(即单独的VHOST)?
非常感谢!
我不认为有一种方法可以通过与虚拟主机相混淆来防止这种情况。 你总是会有一个默认的虚拟主机。
但是,你可以用mod_rewrite来完成它。 就像是
RewriteEngine on RewriteCond %{HTTP_HOST} !^mydomain.com [NC] RewriteRule ^/(.*) /$1 [F]
当服务器被IP到达时,将返回403(F =禁止),除非有人聪明(即,在仍然使用IP的情况下插入Host:http标头;普通浏览器不这样做)。
您也可以尝试redirect到mydomain.com而不是禁止:
RewriteEngine on RewriteCond %{HTTP_HOST} !^mydomain.com [NC] RewriteRule ^/(.*) http://mydomain.com/$1 [R=301]
第一个VirtualHost是默认的,这就是为什么它也获得你的IP请求。
我会这样做:
NameVirtualHost *:80 <VirtualHost 1.2.3.4:80> ServerName ip.mydomain.com # first VH is default! </VirtualHost> <VirtualHost 1.2.3.4:80> ServerName mydomain.com </VirtualHost>