使Apache服务器仅接受对域的请求,而不接受IP


9

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

我想防止这种情况。我希望只能在FQDN上访问我的网站,即http://example.com/

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



尽管该问题与我链接到的重复项目不完全匹配,但该问题的答案也是该问题的答案。
珍妮·D

我很好奇你为什么要这么做。反向DNS是一回事。
njzk2

Answers:


7

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

这样,将仅提供定义的域。

<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都将取消流量。

要取消流量,您可以使用重定向到-,然后添加错误代码,例如,我使用RewriteRule重定向到406 Not AcceptableR=406)。

在这里您可以找到重定向代码列表:https : //fr.wikipedia.org/wiki/Liste_des_codes_HTTP


谢谢!我尝试了您的方法,并且有效。但是我改变了一点。我创建了一个新的虚拟主机,并将服务器的IP地址+ RewriteRule设置为ServerName :)
antiks

11

您可以添加一个默认虚拟主机,该主机仅给出“拒绝的”错误,或其他原因。然后,当浏览器进入您的网络服务器时,URL中没有与任何虚拟主机匹配的主机ServerNameServerAlias其他虚拟主机中的行将由默认虚拟主机提供服务。

因此,在您的apache配置中:

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

<VirtualHost *:80>
    ServerName mywebsite.com
    ...
</VirtualHost>

1

您需要这样的重写规则:

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

这不符合OP的要求。
Lightness Races in Orbit
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.