各位,
我们正在尝试为以下场景设置 Apache 反向代理:
- 传入请求采用以下形式
http://foo.com/APP/v1/main.html
- 对于某些服务器,URL 将引用不同的版本,例如,
http://foo.com/APP/v2/main.html
- 上游负载均衡器 (HAProxy) 会将请求发送到正确的服务器,该服务器将在 JBoss 服务器前面有一个 Apache2 反向代理。
- 当请求出现在 Apache 2 时,它将具有如下请求路径
/APP/v1/main.html
- 我们希望它(反向)代理到
http://localhost:8080/AppContext/main.html
, 不顾一切URL 中的版本片段(v1、v2 等)。
我一直在尝试这样做:
ProxyPassMatch ^/.*?/APP.*?/(.*)$ http://localhost:8080/AppContext/$1
ProxyPassReverse /APP http://localhost:8080/AppContext
我的问题是:
- 我使用的是
ProxyPassMatch
正确的?
- My
ProxyPassReverse
是“静态”的。我如何让它意识到之后可能发生变化的东西/APP
?
感谢您的任何见解。
-Raj
您已经很接近了,请尝试稍微更改正则表达式以考虑版本片段:
ProxyPassMatch ^/.*?/APP.*?/v[0-9]+/(.*)$ http://localhost:8080/AppContext/$1
The ProxyPassReverse
主要是为了确保在代理应用程序给出的响应中动态重写位置标头字段。因此,当它返回 301 重定向时,例如,http://localhost:8080/AppContext/something
,apache知道将其更改为/APP/v1/something
因此代理背后的信息不会被暴露。因为您在反向代理中使用了动态 URL,所以您在这里有几个选择。您可以将其发送到 HAProxy 负载均衡器(不确定该负载均衡器适合您),或者您也可以只选择一个并期待最好的结果。例如,如果您有一个负载均衡器/APP/balancer/
然后将请求发送到/APP/v1/
, /APP/v2/
, /APP/v3/
等等。然后你可以这样做:
ProxyPassReverse /APP/balancer http://localhost:8080/AppContext
否则,您可以将其指向一个并希望得到最好的结果:
ProxyPassReverse /APP/v1 http://localhost:8080/AppContext
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)