我已成功创建了一个正常运行的ProxyPass ajp规则,但现在我想使用ip-whitelist限制某些网址的访问权限。换句话说,当有人来自不在白名单中的IP时,请求不应被代理通过(理想情况下,应该发出某种拒绝访问)
我无法控制代理传递给我的机器,所以我无法将ip-whitelist放在该机器的配置上。这就是为什么我试图在具有proxypass规则的同一台机器上配置它。
定义<位置/路径>使用'允许来自' -rules不起作用,因为请求仍然是代理通过的。我想这只是意味着proxypass规则先于location-rules。
我试图通过根据远程地址设置环境变量来解决这个问题(因为那时我可以将非白名单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/
完美无缺。
我没有选择。有没有其他人有建议如何处理这个?
答案 0 :(得分:0)
我今天学到了这一点......在请求周期中,SetEnv晚于应用而不是ProxyPass,所以它没有及时设置。但是,SetEnvIf应用得足够早,就像使用RewriteCond / RewriteRule设置的环境变量一样。你应该能够将它重构为一个始终为true的SetEnvIf并且可以解决这个问题。