在 apache 中禁用直接 IP 访问

在 apache 中禁用直接 IP 访问

这是我的 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,allowDeny 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>

评论:我同意还有其他有效的解决方案;但是,这是我喜欢组织配置文件的方式,里面有安全限制DirectoryLocation块,这样我就知道在哪里寻找它们。

答案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。

相关内容