我有如下的虚拟主机:
<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>
我放在Proxy部分的IP没有被阻止。 我不理解正确的拒绝/允许顺序吗? 还是有一些其他指令我需要使用?
您的order指令是错误的。
Order指示apache如何评估allow和deny指令。 在和deny,allowconfiguration,你首先指定你的拒绝的来源,然后例外(允许的起源)拒绝列表。
由于被禁止的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>
注意: 如果找不到匹配既不deny也allow 匹配 ,则最后一个参数设置为默认操作,所以xxxx from all中xxxx from all是不必要的,但是大多数人喜欢明确地设置它。
这相当于:
order allow,deny Deny from 65.74.5.130 Allow from all
65.74.5.130匹配allow和deny ,应用顺序(第一个允许,最后一个拒绝),它将拒绝访问。 对此:
order deny,allow Deny from 65.74.5.130
65.74.5.130匹配只deny ,所以拒绝访问 allow或deny ,所以它会采取默认的行动allow ,允许访问。