我正在从 Apache 2.2 迁移到 2.4,并且希望使用“Require”,而不是现在不鼓励使用的Allow
, Deny
。
我的问题:如何通过在配置文件中每行一个地址/范围来允许从一组 IP 地址或范围进行访问?
对于 Apache 2.2,我使用了:
Order deny,allow
Deny from all
Allow from 2001:1000:2000::1/64
Allow from 1.2.3.4
Allow from 1.2.3.10
这如何转化为新的访问控制语法?
答案1
这升级文档中提供了有关如何执行此操作的清晰信息。如果需要进行任何其他配置更改,也应该阅读此文档:https://httpd.apache.org/docs/2.4/upgrading.html
另外,您不需要将不同的 IP 地址或网络放在不同的行上。完全可以接受以下做法:
# Apache v2.2
Allow from 1.2.3.4 1.2.3.10
# Apache v2.4
Require ip 1.2.3.4 1.2.3.10
最后,默认情况下,多个 require 指令将被视为位于一个<RequireAny>
块中,因此除非您要形成更复杂的嵌套分组,否则您无需添加它。当然,您可能希望澄清这一点。参考:https://httpd.apache.org/docs/2.4/howto/auth.html#beyond
附加信息:另一个想法是,升级时,您一定要检查所有配置(包括htaccess
您可能拥有的任何文件),并将较旧的 Apache v2.2 指令转换为 Apache v2.4 指令,然后注释掉模块的加载mod_access_compat
。混合使用 v2.2 和 v.24 指令可能会导致一些非常不寻常的问题,这些问题很难解决。
答案2
我知道这是一篇老帖子,但我认为它可以帮助我提供经常使用的功能示例!
在 apache 2.2 中将是这样的:
<Location />
Order deny, allow
allow from all
</Location>
<Location /adm>
Order deny, allow
deny from all
allow from myniceip
</Location>
<Location /disabled>
Order deny, allow
deny from all
</Location>
在 apache 2.4 中将是这样的:
<Location />
require all granted
</Location>
#Note that you dont need to use require all denied
#to require only a group of ips..
<Location /adm>
require myniceip
</Location>
<Location /disabled>
Require all denied
</Location>
答案3
我认为您要找的是管理特定 IP 地址列表。对于他们,您只需编写:
Require ip 127.0.0.1
Require ip 127.0.0.2
每行包含您想要授予访问权限的 IP。更改您想要提供访问权限的 IP。您可以使用CIDR 表示法。