我们有一些Apache服务器,包括各级密码保护。 例如,对于testing/登台系统,我们有/密码保护,并要求具体的用户名:
<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。
无论其他身份validation可能成功,限制基于IP的新位置访问的正确方法是什么?
这些Apache服务器只是Tomcat应用程序的前端,所以没有可以放入.htaccess文件的实际目录结构。
我实际上需要做一些事情的组合,因为我已经有了这个定义,正如原来的问题中提到的那样:
<Location /> AuthType Basic AuthName "By Invitation Only" AuthUserFile /etc/httpd/conf/passwd Require user staging demo test </Location>
为了限制通过IP访问/newlocation ,即使提供了有效的密码,我也需要包含以上内容以及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>
指令Order参数顺序非常重要。 您设置Order Deny,Allow而不是Order Allow,Deny
这是您正在寻找的configuration:
<Location /newlocation> Order Allow,Deny Allow From 1.2.3.4/24 Satisfy any </Location>
将只允许IP范围1.2.3.4/24显示/新位置path