在 apache 中禁用直接 IP 访问

jon*_*ans 3 apache-2.2

这是我的 httpd.config 文件 如何禁用直接 IP 访问?如果有人输入站点的 ip 地址,则不应重定向到默认域名或本示例中为 xxx.com 的站点

    <VirtualHost ipaddress:8080>

            ServerName xxx.com
            ServerAlias www.xxx.com
            ServerAdmin info@xxx.com
            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>
Run Code Online (Sandbox Code Playgroud)

sim*_*lev 7

我正在将我的评论扩展为答案,以便提供详细配置以响应 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>
Run Code Online (Sandbox Code Playgroud)

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

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

说明:当使用 IP 地址调用时,apache 会使用默认的 VirtualHost 详细说明请求。定义的第一个 VirtualHost 是默认值,无论其 ServerName 是什么。当然,将 ServerName 设置为 IP 地址也有效,并且将保留默认服务器以供其他情况使用。location 块拒绝对整个 VirtualHost 的每个请求。

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

更新:问题已更新,所以我认为最好提供 的配置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>
Run Code Online (Sandbox Code Playgroud)

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

  • @w3dk 根据您的评论,我尝试省略“Location”指令,但出现“语法错误:此处不允许订购”。你有什么建议? (2认同)