是否有可能告诉Apache只提供配置的VHost?我目前的解决方案是使用带有*作为别名的VHost,当以前的VHost匹配时使用该别名。
答案 0 :(得分:2)
在Apache中,如果没有其他VirtualHost匹配,则第一个列出的VirtualHost是默认的。因此,您可以创建一个没有内容的虚拟VirtualHost,或者只创建一个登录页面(“此地址未配置站点”或类似内容),并将其作为您的第一个VirtualHost。不需要ServerAlias的ServerName,只要它是第一个。
另请参阅:http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html
答案 1 :(得分:1)
我通常做的是禁止访问conf.d / security文件中的根目录(这是Ubuntu中的标准方式,在其他操作系统中你可以将它放在httpd.conf中)
<Directory />
AllowOverride None
Order Deny,Allow
Deny from all
</Directory>
因此,Apache只允许访问VirtualHosts中配置的子目录。例如,您可以:
/var/www/example1.domain.com/your_files
/var/www/example2.domain.com/your_files
让VirtualHosts像这样:
ServerName example1.domain.com
ErrorLog /var/log/apache2/example1.domain.com_error.log
CustomLog /var/log/apache2/example1.domain.com_access.log Combined
DocumentRoot /var/www/example1.domain.com/
(...)
<Directory />
Options FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ServerName example2.domain.com
ErrorLog /var/log/apache2/example2.domain.com_error.log
CustomLog /var/log/apache2/example2.domain.com_access.log Combined
DocumentRoot /var/www/example2.domain.com/
(...)
<Directory />
Options FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
但是,mrjink指出,此配置将使用第一个VirtualHost将服务器以某种方式到达服务器的所有请求(通过ip或未知主机名)。因此,需要一个额外的Dummy VirtualHost,其名称应该类似于“000-dummy-virtualhost”,以确保它是第一个为这些请求提供服务的VirtualHost。
有了这个conf,您的服务器或IP的请求将不会被提供,但是对example1.domain.com或example2.domain.com的请求将会被提供。
此致