我有以下设置:
<Proxy balancer://clusterX>
BalancerMember http://app.server:1234
</Proxy>
<Proxy balancer://clusterY>
BalancerMember http://app.server.2:1234
</Proxy>
RewriteEngine On
RewriteCond %{REMOTE_ADDR} 1$|2$|3$|4$|0$
RewriteRule ^/something-here(.*)$ balancer://clusterX/something-here$1 [P,L]
在这种情况下,当请求来自 1、2、3 或 4 上的 IP 地址时,mod_rewrite 会将其发送到 clusterX。但是,如果我通过浏览器更改请求中的某些内容,它会直接将我发送到 appp.server:1234(在我的情况下,这是 IP 地址),而不是我访问两个集群的原始主机名。
知道原因吗?
答案1
我自己找到了答案。
基本上,mod_rewrite将请求转发到应用服务器,但是当应用服务器返回数据时,没有模块来处理HTTP标头中url的重写。
为了使其工作,请添加以下内容:
ProxyPassReverse /something-here 平衡器://clusterX/something-here