仅允许某些 IP 使用 ProxyPass

仅允许某些 IP 使用 ProxyPass

使用以下代码片段,每个人都可以访问 /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

但是,如果我希望 /foo 可供所有人访问,而 /bar 仅供来自特定 IP 的请求访问,这可能吗?

答案1

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

使用一个 IP:

SetEnvIf Remote_Addr "123.123.123.123" TRUST=yes

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

SetEnvIf Remote_Addr "123\.123\.123\.123|134\.134\.(134\.(134|134)|134\.134)" TRUST=yes

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

ProxyPass /foo http://example.com/foo env=TRUST

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

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

希望能帮助到你。

答案2

答案应该如下。我已将 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>

答案3

<Location /bar>
    Allow from 1.2.3.4 2.3.4.5 ...
    ProxyPass http://example.com/bar
    ProxyPassReverse http://example.com/bar
</Location>

请注意,ProxyPass 和 ProxyPassReverse 的第一个参数在这里暗示是位置块的目标。

相关内容