![如何在 Apache 反向代理下根据两个条件进行反向操作](https://linux22.com/image/755489/%E5%A6%82%E4%BD%95%E5%9C%A8%20Apache%20%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E4%B8%8B%E6%A0%B9%E6%8D%AE%E4%B8%A4%E4%B8%AA%E6%9D%A1%E4%BB%B6%E8%BF%9B%E8%A1%8C%E5%8F%8D%E5%90%91%E6%93%8D%E4%BD%9C.png)
我是 apache 反向代理的新手,我试图像下面这样反向 Url 调用:
Principe-forwarding-schema.jpg
我可以像这样转发 Webserver1 上的所有请求:
<VirtualHost *:80>
ProxyPreserveHost On
ServerName localhost
ProxyPass / http://webserver1/
ProxyPassReverse / http://webserver1/
</VirtualHost>
但我无法对 Url Param 示例制定条件:
如果是“http://reverse.proxy.com/?param=foo”,则将其转发到 WebServer 2
而且,我不知道这些规则是否可以采用相同的配置。
非常感谢您的帮助
答案1
对于您描述的条件,您必须使用 mod_rewrite 来代理。
RewriteCond %{QUERY_STRING} ^param=foo$
RewriteRule ^(.*) http://webserver2/$1 [P,L]
RewriteRule ^(.*) http://webserver1/$1 [P,L]
说明:首先,我们检查要匹配的查询字符串,如果匹配,则应用以下 RewriteRule,但如果不匹配,则应用第二个 RewriteRule。