apache 中的条件反向代理

Conditional reverse proxy in apache

如果请求来自 public ip 50.12.95.78。代理传递给 http://192.168.1.100/quote url.

如果请求来自其他 public ip。代理传递给 http://192.168.1.100/ url

它在 apache 中的设置是什么?反向代理不会在 if 条件下工作。

您可以利用 mod_proxymod_rewrite 在 Apache httpd 中设置条件反向代理。

例如,如果您最初使用以下配置设置反向代理:

ProxyPass        / http://192.168.1.100/
ProxyPassReverse / http://192.168.1.100/

可以使用 proxy flag on a RewriteRule 使其成为有条件的。示例配置可能如下所示:

RewriteEngine On
ProxyPassInterpolateEnv On
RewriteCond "%{REMOTE_ADDR}" =50.12.95.78
RewriteRule (.*) http://192.168.1.100/quote [P,E=proxy_pass_path:/quote]
RewriteRule (.*) http://192.168.1.100 [P]
ProxyPassReverse / http://192.168.1.100${proxy_pass_path}/ interpolate
  1. 第一个 RewriteRule 仅在前面的情况下应用和代理 RewriteCond 指令匹配,即如果远程 IP 地址是 50.12.95.78。
    • [P]roxy 标志还阻止应用进一步的 RewriteRule 指令。
    • 环境变量proxy_pass_path设置为告诉ProxyPathReverse指令路径已被修改
  2. 第二个RewriteRule 如果第一个未评估,则自动应用。
  3. 最后, ProxyPathReverse 修改指令以重写响应头 基于 proxy_pass_path 变量。

超出您的问题范围,请记住,这种代理不会实现任何真正形式的安全。 50.12.95.78 以外的 IP 地址仍然可以通过请求 http://<Proxy_Host>/quote.

访问 http://192.168.1.100/quote