只允许某些 IP 的 ProxyPass

mob*_*mad 7 reverse-proxy apache-2.2

使用以下代码段,每个人都可以访问 /foo 和 /bar

ProxyPass /foo http://example.com/foo
ProxyPassReverse /foo http://example.com/foo 
ProxyPass /bar http://example.com/bar
ProxyPassReverse /bar http://example.com/bar
Run Code Online (Sandbox Code Playgroud)

但是,如果我希望每个人都可以访问 /foo,而 /bar 仅适用于来自特定 IP 的请求,这可能吗?

小智 5

答案应该如下。对于需要允许整个子网而不是一组单个 IP 的用户,我在一个规则中包含了一个 IP 和一个子网。

<Location /foo>
    Deny from all                       // **This rule is the most IMPORTANT**    
    Allow from 192.168.1.2 10.100       // The second value implies 10.100.0.0/16 subnet
    ProxyPass http://example.com/foo
    ProxyPassReverse http://example.com/foo
</Location>
Run Code Online (Sandbox Code Playgroud)


tmo*_*mow 3

我认为您可以使用SetEnvIf指令检查远程地址(Remote_Addr)。

拥有一个IP:

SetEnvIf Remote_Addr "123.123.123.123" TRUST=yes
Run Code Online (Sandbox Code Playgroud)

使用正则表达式检查多个IP

SetEnvIf Remote_Addr "123\.123\.123\.123|134\.134\.(134\.(134|134)|134\.134)" TRUST=yes
Run Code Online (Sandbox Code Playgroud)

我不确定你可以直接这样做:

ProxyPass /foo http://example.com/foo env=TRUST
Run Code Online (Sandbox Code Playgroud)

但也许您可以使用重写规则并获得相同的结果......

例如,您可以将所有不受信任的 IP 重写到特定页面 ( env=!TRUST)

希望能帮助到你。