在Apache中阻止非虚拟主机访问?

我正在运行一个Apache服务器,有大约七个域名的虚拟主机。 现在,我想禁止只使用其IP地址访问我的服务器的客户访问。 所以:

  • 当有人通过www.domain.com访问我的网站时,他们会访问/var/www/domain.com/public_html/托pipe的网站。

  • 当有人input服务器的IP地址时,他们到达了403 Forbidden消息。

这个问题是,他们理论上能够通过暴力,当http://11.22.33.44/domain.com/public_html/到达我的其他网站。

我宁愿让他们一直达到403 Forbidden访问,只要他们不通过有效的域名访问我的服务器。

我如何解决这个问题?

使用基于名称的虚拟主机时,要加载的第一个VirtualHost将获取所有没有主机名的请求(或主机名与configuration的主机名不匹配)。

在Debian上,你可能有一个文件/etc/apache2/sites-available/default ,因为它的链接位于/etc/apache2/sites-enabled/0-default (首字母表示它将首先加载),它是用一个提供/var/www/的VirtualHost来设置的。

假设您的domain.com由不同的站点文件或同一个文件中的不同VirtualHost块提供服务,一个好的解决scheme是将默认的VirtualHost设置为不再提供任何文档,而是取而代之发送redirect到正确的DNS名称。 这种方法也会将相同的操作应用于系统无法识别的主机头中的任何请求:

RewriteEngine on

RewriteRule ^.*$ http://domain.com/ [R]

将默认文档path更改为/var/www/ 。 例如,将默认path设置为/var/www/forbidden/

您还可以创build_default_虚拟主机,它将匹配与其他虚拟主机不匹配的所有内容。