如何在 Apache Httpd 2.4 上仅允许来自特定主机的访问?

问题描述 投票:0回答:2

我使用

Apache Httpd 2.4
作为 Web 服务器,但我无法仅允许从特定主机访问我的 Web 服务器上的 URL 路径“/x”。

httpd.conf:

<Location "/x">
    Require host myhost.com
</Location> 

基本上它会忽略“需要主机 myhost.com”并限制来自所有主机的访问。

authz_host
authz_core
模块已启用。

我错过了什么吗?

谢谢

apache httpd.conf apache2.4
2个回答
2
投票

要使

Require host
正常工作,您必须确保您的域的反向 DNS 查找正常工作。这是通过 DNS 中的
PTR
(指针)记录完成的。您可以使用
dig
命令检查它,如下所示:

$ dig +short www.google.de
172.217.22.67
$ dig +noall +answer -x 172.217.22.67
67.22.217.172.in-addr.arpa. 85372 IN    PTR fra15s17-in-f3.1e100.net.
67.22.217.172.in-addr.arpa. 85372 IN    PTR fra15s17-in-f67.1e100.net.

注意PTR记录的IP是颠倒过来的:172.217.22.67 <=> 67.22.217.172

因此 www.google.com 有一个正确的反向 DNS 条目。

如果您的域没有设置反向 dns 指针,您将在 apache 错误日志中找到类似这样的条目(除非您将其配置为位于不同的位置,否则应该是

/var/log/apache2/error.log
):

[Wed Dec 05 16:18:23.854771 2018] [authz_core:error] [pid 4711] [client W.X.Y.Z:54050] AH01630: client denied by server configuration: /var/www/example.com/x

作为解决方法,您可以使用

Require ip
:

<Location "/x">
    Require ip W.X.Y.Z
</Location> 

其中 W.X.Y.Z 是根据 error.log 中的条目您的 IP。

希望这有帮助,如果有的话,我会很高兴您能接受答案。


0
投票

这是一个真实的问题,在 stackoverflow 上没有正确的解决方案,所以让我在这里给出解决方案:

SetEnvIf Host ^myhost\.com$ valid_domain

<Location "/x">
    Require env valid_domain
</Location>

我不知道为什么这能解决问题,但确实如此

© www.soinside.com 2019 - 2024. All rights reserved.