2013-04-23 75 views
0

我已经成功地创建了一个可以正常工作的ProxyPass ajp规则,但是现在我想限制某些使用IP白名单的URL的访问。换句话说,当有人来自不在白名单上的IP时,该请求不应该被接受(并且理想情况下,应当发布某种拒绝访问)有条件的代理通过使用ip白名单的ajp规则

我没有控制机器i代理传递给我,所以我不能把IP白名单放在那台机器的配置上。这就是为什么我试图在具有proxypass规则的同一台机器上进行配置。

定义一个<位置/路径>'Allow from'规则不起作用,因为请求仍然是proxypassed。我想这仅仅意味着代理通行规则在位置规则之前。

我试图解决它通过设置一个环境变量,取决于远程地址(因为那时我可以代理非白名单ips不存在的网址 - 不漂亮,但它会实现目标) ,但似乎proxypass规则不适用于环境变量。像这样简单:

SetEnv custom_proxypath=/ 
ProxyPass %{ENV:custom_proxypath} ajp://10.50.40.21:8009/ 
ProxyPassReverse %{ENV:custom_proxypath} ajp://10.50.40.21:8009/ 

不起作用。而

ProxyPass/ajp://10.50.40.21:8009/ 
ProxyPassReverse/ajp://10.50.40.21:8009/ 

完美的作品。

我没有选择。有没有人有建议如何解决这个问题?

回答

0

我今天得知这个...... SetEnv在请求周期中应用后面的比ProxyPass,因此它没有及时设置。但是,SetEnvIf应用程序的早期应用程序,以及使用RewriteCond/RewriteRule设置的环境变量。你应该可以将它重构为一个始终为真的SetEnvIf,并且可以做到这一点。