![mod_rewrite 代理返回 ip 地址而不是主机名](https://linux22.com/image/621783/mod_rewrite%20%E4%BB%A3%E7%90%86%E8%BF%94%E5%9B%9E%20ip%20%E5%9C%B0%E5%9D%80%E8%80%8C%E4%B8%8D%E6%98%AF%E4%B8%BB%E6%9C%BA%E5%90%8D.png)
我有以下设置:
<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