我们有一些 Apache 服务器包含不同级别的密码保护。例如,对于测试/登台系统,我们有/
密码保护并要求使用特定的用户名:
<Location />
AuthType Basic
AuthName "By Invitation Only"
AuthUserFile /etc/httpd/conf/passwd
Require user staging demo test
</Location>
在相同的设置中,我们还保护其他位置:
<Location /api/billing>
AuthType Basic
AuthName "Billing"
AuthUserFile /etc/httpd/conf/billingpasswd
Require user billing
</Location>
现在我被要求根据 IP 地址限制另一个位置。在这种情况下,所有以前的密码都应该像以前一样有效,但即使提供了密码,我们也希望仅根据 IP 拒绝对新位置的访问。
<Location /newlocation>
Order Deny,Allow
Deny From All
Allow From 1.2.3.4/24
</Location>
如果此新Location
指令包含,Satisfy All
那么即使我尝试连接,即使我从允许的子网之一进行连接,也会收到 403(禁止)错误。如果我将其更改为,Satisfy Any
那么我可以从任何 IP 地址连接到 /newlocation,无论它是否被列为允许。
无论其他身份验证是否成功,基于 IP 限制对新位置的访问的正确方法是什么?
这些 Apache 服务器只是 Tomcat 应用程序的前端,因此没有可供我放入 .htaccess 文件的实际目录结构。
答案1
我实际上需要做几件事,因为我已经定义了这一点,正如原始问题中提到的那样:
<Location />
AuthType Basic
AuthName "By Invitation Only"
AuthUserFile /etc/httpd/conf/passwd
Require user staging demo test
</Location>
为了限制/newlocation
通过 IP 进行的访问,即使提供了有效的密码,我也需要包含上述内容以及 IP 范围并指定Satisfy All
:
<Location /newlocation>
AuthType Basic
AuthName "By Invitation Only"
AuthUserFile /etc/httpd/conf/passwd
Require user staging demo test
Order Allow,Deny
Allow From 1.2.3.4/24
Satisfy All
</Location>
答案2
指令Order
参数顺序很重要。你可以设置Order Deny,Allow
而不是Order Allow,Deny
这是您正在寻找的配置:
<Location /newlocation>
Order Allow,Deny
Allow From 1.2.3.4/24
Satisfy any
</Location>
仅允许 IP 范围 1.2.3.4/24 显示 /newlocation 路径