这是我的 httpd.config 文件如何禁用直接 IP 访问?如果有人输入网站的 IP 地址,则它不应重定向到默认域名或网站(本例中为 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>
答案1
我将我的评论扩展为答案,以便提供详细的配置来响应 OP 的进一步询问。我的建议是将您的配置移到 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 来处理请求。定义的第一个 VirtualHost 是默认的,无论其 ServerName 是什么。当然,将 ServerName 设置为 IP 地址也是可行的,并且将使默认服务器可以自由使用。位置块拒绝对整个 VirtualHost 的所有请求。
编辑:后来我发现问题标记为apache-2.2
,而我的答案使用apache-2.4
语法。apache-2.2
行上Require all denied
必须用两行替换:Order deny,allow
和Deny from all
。此外,定义NameVirtualHost *:80
前必须有一个VirtualHost
。
更新:问题已更新,因此我认为最好提供配置apache-2.2
,包括所有必要的行。适用与上述相同的解释。
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>
评论:我同意还有其他有效的解决方案;但是,这是我喜欢组织配置文件的方式,里面有安全限制Directory
或Location
块,这样我就知道在哪里寻找它们。
答案2
IP 总是会被访问(毕竟这是你的域名指向的),你可以检查请求是使用哪个主机名发出的:
例如使用 mod-rewrite:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^192\.168\.0\.1$
RewriteRule .* - [F,L]
您还可以选择重定向所有您不喜欢的主机名
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.thedomainiwant\.com$ [NC]
RewriteRule .* http://www.thedomainiwant.com%{REQUEST_URI} [R=301,L]
或者使用 https:// 重写 ;-)
答案3
还有另一种使用 mod_setenvif 的方法
SetEnvIf HOST ^[0-9].+[0-9]$ HOST_NODNS
Deny from env=HOST_NODNS
请注意,我们使用的是 HOST 而不是 HTTP_HOST。