使用代理阻止Apache VHost中的IP地址

我有如下的虚拟主机:

<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如何评估allowdeny指令。 在和deny,allowconfiguration,你首先指定你的拒绝的来源,然后例外(允许的起源)拒绝列表。

由于被禁止的IP与两个指令相匹配,因此您将其作为拒绝规则的例外来引入,允许其自由访问。

使用order allow,deny使用相同的denyallow您必须限制其访问的指令:

 <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> 

注意: 如果找不到匹配既不denyallow 匹配 ,则最后一个参数设置为默认操作,所以xxxx from allxxxx from all是不必要的,但是大多数人喜欢明确地设置它。

这相当于:

 order allow,deny Deny from 65.74.5.130 Allow from all 
  • 65.74.5.130匹配allowdeny ,应用顺序(第一个允许,最后一个拒绝),它将拒绝访问。
  • 任何其他的IP都可以匹配,所以它会允许访问。

对此:

 order deny,allow Deny from 65.74.5.130 
  • 65.74.5.130匹配只deny ,所以拒绝访问
  • 任何其他的IP不会匹配任何allowdeny ,所以它会采取默认的行动allow ,允许访问。