禁用Apache中的直接IP访问

这是我的httpd.config文件如何禁用直接IP访问? 如果有人input了该网站的IP地址,那么它不应该redirect到默认的域名或本例中的xxx.com网站

<VirtualHost ipaddress:8080> ServerName xxx.com ServerAlias www.xxx.com ServerAdmin [email protected] DocumentRoot /home/admin/web/xxx.com/public_html ScriptAlias /cgi-bin/ /home/admin/web/xxx.com/cgi-bin/ Alias /vstats/ /home/admin/web/xxxcom/stats/ Alias /error/ /home/admin/web/xxx.com/document_errors/ . . . </VirtualHost> 

我正在将我的意见扩展为一个答案,以提供详细的configuration,以回应OP的进一步调查。 我的build议是将你的configuration转移到VirtualHost模块,以提高灵活性。 这里只显示必要的部分:

 <VirtualHost *:80> ServerName default DocumentRoot /home/admin/web/xxx.com/public_html <Location /> Require all denied </Location> </VirtualHost> <VirtualHost *:80> ServerName domain.com DocumentRoot /home/admin/web/xxx.com/public_html </VirtualHost> 

default可以是任何名称或服务器的IP地址。

domain.com是您希望您的服务器响应的域。

说明:使用IP地址调用时,apache使用默认的VirtualHost来阐述请求。 无论ServerName如何,定义的第一个VirtualHost都是默认的。 当然,将ServerName设置为IP地址也是可行的,否则将使用默认服务器。 位置块拒绝整个VirtualHost的每个请求。

编辑:我后来看到这个问题被标记为apache-2.2 ,而我的答案使用apache-2.4语法。 在apache-2.2Require all denied的行必须用两行代替: Deny from all Order deny,allowDeny from all 。 另外, VirtualHost定义之前需要NameVirtualHost *:80

更新:问题已经更新,所以我认为最好提供apache-2.2的configuration,包括所有必要的行。 与上面相同的解释适用。

 Listen 8080 NameVirtualHost ipaddress:8080 <Directory "/home/admin/web/xxx.com/public_html"> Order allow,deny Allow from all </Directory> <VirtualHost ipaddress:8080> ServerName ipaddress DocumentRoot /home/admin/web/xxx.com/public_html <Location /> Order deny,allow Deny from all </Location> </VirtualHost> <VirtualHost ipaddress:8080> ServerName xxx.com DocumentRoot /home/admin/web/xxx.com/public_html </VirtualHost> 

评论:我同意还有其他有效的解决scheme。 然而,这是我喜欢组织我的configuration文件, DirectoryLocation块内的安全限制,所以我知道在哪里寻找他们。

IP将永远被访问(毕竟这是你的域名指向),你可以做的是检查哪个主机名的请求是用来做:

对于实例使用mod-rewrite:

 RewriteEngine On RewriteCond %{HTTP_HOST} ^192\.168\.0\.1$ RewriteRule .* - [F,L] 

你也可以selectredirect你不喜欢的所有主机名

 RewriteEngine On RewriteCond %{HTTP_HOST} !^www\.thedomainiwant\.com$ [NC] RewriteRule .* http://www.thedomainiwant.com%{REQUEST_URI} [R=301,L] 

或者使用https://重写;-)

另一种使用mod_setenvif的方法

  SetEnvIf HTTP_HOST ^[0-9].+[0-9]$ HOST_NODNS Deny from env=HOST_NODNS