我想只允许一个国家访问,但在此国家/地区内排除代理.
这就是我所拥有的(为方便起见,缩短版本)
<Limit GET POST>
order deny,allow
deny from all
allow from 139.82.0.0/16
allow from 143.54.0.0/16
allow from 186.192.0.0/11
allow from 186.224.0.0/11
.
deny from 186.201.27.66
deny from 186.201.196.1
deny from 186.214.51.231
deny from 186.237.225.26
</Limit>
Run Code Online (Sandbox Code Playgroud)
但我知道这不行.我该怎么做呢?
reg*_*ero 124
更新:为新的apache 2.4直接跳到最后.
该订单关键字及其与关系Deny
和Allow
指令是一个真正的噩梦.理解我们如何最终得到这样的解决方案将是非常有趣的,至少可以说是非直观的解决方案.
Order
关键字将有关于如何有很大的影响Allow
,并Deny
指示使用.Deny
和Allow
指令没有在它们被写入的顺序应用,它们必须被视为两个不同的块(一个用于Deny
指令,一个用于Allow
).您有两种主要模式:
Order Deny,Allow
Run Code Online (Sandbox Code Playgroud)
Deny
规则.Deny
规则拒绝了一些请求.Allow
.我会把它改为:
Rule Deny
list of Deny rules
Except
list of Allow rules
Policy Allow (when no rule fired)
Run Code Online (Sandbox Code Playgroud)
Order Allow,Deny
Run Code Online (Sandbox Code Playgroud)
Allow
规则.Allow
规则.Allow
,你仍然可以拒绝他们Deny
.以简化形式:
Rule Allow
list of Allow rules
Except
list of Deny rules
Policy Deny (when no rule fired)
Run Code Online (Sandbox Code Playgroud)
您需要允许作为国家/地区网络的网络列表.在这个国家/地区,您希望排除某些代理的IP地址.
您已采用allow-anyone-except-this-list-or-maybe-not模式,因此默认情况下任何人都可以访问您的服务器,但Deny
列表中列出的代理的IP除外,但如果它们被拒绝,您仍然允许国家/地区网络.这太宽泛了.不好.
通过反转order allow,deny
你将处于拒绝 - 每个人 - 除了这个列表 - 或者 - 可能 - 不是模式.因此,您将拒绝访问所有人,但允许国家/地区网络,然后您将拒绝代理.当然,你必须删除Deny from all
@Gerben和@Michael Slade所述的内容(这个答案只能解释他们写的内容).
在Deny from all
通常出现与order deny,allow
以除去默认允许访问并作一个简单的,可读的配置.例如,在此之后指定允许的IP列表.您不需要该规则,您的问题是3路访问模式的完美案例(默认策略,例外,例外例外).
但设计这些设置的人肯定是疯了.
整个授权方案已在Apache 2.4中使用RequireAll,RequireAny和RequireNone指令进行了重构.例如,参见这个复杂的逻辑示例.
所以旧的奇怪Order
逻辑变成了遗物,引用新文档:
控制授权的执行方式和顺序在过去一直是个谜
不直接回答OP的问题,而是对于那些发现这个问题以寻求澄清 和 之间的区别的allow,deny
人deny,allow
:
将逗号读作“但是”。
allow but deny
:白名单,但有例外。deny but allow
: 黑名单(例外情况)。只允许一个国家访问,但排除该国家内的代理
OP 需要一个有例外的白名单,因此allow,deny
而不是deny,allow
归档时间: |
|
查看次数: |
120212 次 |
最近记录: |