0

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

我无法控制我代理传递到的机器,所以我不能将 ip-whitelist 放在该机器的配置上。这就是为什么我试图在具有 proxypass 规则的同一台机器上配置它。

使用“允许来自”规则定义 <Location /path> 不起作用,因为该请求仍然是通过代理传递的。我想这只是意味着 proxypass 规则先于位置规则。

我试图通过根据远程地址设置一个环境变量来解决它(因为那样我可以将非白名单 ips 代理到不存在的 url - 不漂亮,但它会实现目标),但似乎 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/

完美运行。

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

4

1 回答 1

0

我今天学到了这个...... SetEnv 在请求周期中的应用比 ProxyPass,所以它没有及时设置。但是,SetEnvIf 应用得足够早,使用 RewriteCond/RewriteRule 设置的环境变量也是如此。您应该能够将其重构为始终为 true 的 SetEnvIf,这样就可以解决问题。

于 2013-07-05T03:06:15.137 回答