我有如下的虚拟主机:
<VirtualHost *:80>
ServerName somename.com
<Proxy *>
order deny,allow
Deny from 65.74.5.130
Allow from all
</Proxy>
ProxyPreserveHost On
ProxyPass / http://0.0.0.0:8890/
ProxyPassReverse / http://0.0.0.0:8082/
</VirtualHost>
我输入到该部分的 IPProxy
没有被阻止。我是不是没有理解正确的拒绝/允许顺序?还是我需要使用其他指令?
答案1
你的order
指令是错误的。
Order
表示 apache 如何评估allow
和deny
指令。在和deny,allow
配置中,您首先指定拒绝的来源,然后将例外(允许的来源)指定到拒绝列表中。
由于您的被禁 IP 符合两个指令,因此您将其作为拒绝规则的例外引入,允许其自由访问。
使用order allow,deny
相同的deny
和allow
指令来限制其访问:
<VirtualHost *:80>
ServerName somename.com
<Proxy *>
order allow,deny
Deny from 65.74.5.130
Allow from all
</Proxy>
ProxyPreserveHost On
ProxyPass / http://0.0.0.0:8890/
ProxyPassReverse / http://0.0.0.0:8082/
</VirtualHost>
笔记:中的最后一个参数order
设置默认行动如果没有匹配因为没有找到deny
或,所以没有必要,但大多数人喜欢明确设置它。allow
xxxx from all
这相当于:
order allow,deny
Deny from 65.74.5.130
Allow from all
65.74.5.130
同时匹配allow
和deny
,并按顺序(第一个允许,最后一个拒绝),它将拒绝访问。- 任何其他IP都会匹配
allow
,因此它将允许访问。
更改为:
order deny,allow
Deny from 65.74.5.130
65.74.5.130
仅匹配deny
,因此拒绝访问- 任何其他 IP 都不会匹配任何
allow
或deny
,因此它将采取默认操作allow
,允许访问。