使Apache服务器只接受对域而不是IP的请求

我有一台运行Apache 2.2.15的CentOS服务器。 如果服务器的IP地址是198.51.100.4,并且我在浏览器http://198.51.100.4上写的,它会在我的网站上。

我想阻止这一点。 我希望我的网站只能在FQDN上访问,例如http://example.com/ 。

如何configuration我的服务器,以便在访问IP地址时无法访问网站?

您可以使用Alias *来捕获虚拟主机允许的任何其他stream量,因此您必须在最后一个位置使用以*作为别名的虚拟主机。

就像只有定义的域将被服务。

 <VirtualHost *:80> ServerName mywebsite.com DocumentRoot /var/www/default ... </VirtualHost> <VirtualHost *:80> ServerName another.mywebsite.com DocumentRoot /var/www/another ... </VirtualHost> # /!\ THIS HAS TO BE ON THE LAST POSITION /!\ <VirtualHost *:80 *:443> # [ Server Domain ] ServerName localhost ServerAlias * # [ Cancel trafic ] RewriteRule .* - [END,R=406] # [ Custom Log ] CustomLog ${APACHE_LOG_DIR}/other.log combined </VirtualHost> 

在我的例子中,只有mywebsite.com&another.mywebsite.com将被允许,所有其他域或IP将被取消stream量。

要取消交通,你可以使用redirect到-然后添加一个错误代码,例如我用一个RewriteRuleredirect到406不可接受R=406 )。

您可以在这里findredirect代码列表: https : //fr.wikipedia.org/wiki/Liste_des_codes_HTTP

你可以添加一个默认的虚拟主机,只是给出了“拒绝”的错误,或者其他什么。 当一个浏览器然后来到您的networking服务器没有一个主机在URL中匹配任何ServerNameServerAlias线在其他虚拟主机将由默认的虚拟主机提供服务。

所以在你的apacheconfiguration中:

 <VirtualHost *:80> ServerName default DocumentRoot /var/www/default ... </VirtualHost> <VirtualHost *:80> ServerName mywebsite.com ... </VirtualHost> 

你需要一个像这样的重写规则:

  RewriteEngine On RewriteCond %{HTTP_HOST} !^mywebsite.com$ RewriteRule /.* https://mywebsite.com/ [R]