使用以下代码片段,每个人都可以访问 /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 的第一个参数在这里暗示是位置块的目标。