民间, 我们正在尝试为以下场景设置Apache反向代理:
http://foo.com/APP/v1/main.html
http://foo.com/APP/v2/main.html
/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
是否正确?ProxyPassReverse
是“静态的”。如何在/APP
之后让它了解潜在的可变内容?感谢您的任何见解。
-Raj
答案 0 :(得分:9)
您已经关闭,请尝试稍微更改正则表达式以考虑版本片段:
ProxyPassMatch ^/.*?/APP.*?/v[0-9]+/(.*)$ http://localhost:8080/AppContext/$1
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