apache中的条件反向代理

时间:2018-05-16 01:43:55

标签: proxy conditional reverse

如果请求来自公共IP 50.12.95.78。 Proxypass到http://192.168.1.100/quote url。

如果请求来自其他公共IP。 Proxypass到http://192.168.1.100/ url

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

1 个答案:

答案 0 :(得分:0)

您可以使用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$1 [P,E=proxy_pass_path:/quote]
RewriteRule (.*) http://192.168.1.100$1 [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 变量。

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