我们目前正在重新定位一个使用上下文选择“配置文件”(定义应用程序属性和 JDBC 连接字符串)的应用程序
目前,URL 是这样的:https://www.foo.com/test/company/profil-name/ 然后您将被重定向到https://www.foo.com/test/company/profil-name/web/online 但还有其他东西,比如 API 上下文: https://www.foo.com/api/profile-name/
我知道当前应用程序在前端和后端使用 apache + haproxy:
Web => apache => local haproxy => backend haproxy => application backend
我的问题是我试图在这里重现相同的配置,但代理不能正常工作(我使用修改后的主机文件进行测试):
https://www.foo.com/test/company/profil-name/重定向至https://www.foo.com/web/test/company/profil-name/online
就像初始上下文被应用程序作为选项字符串一样。
我对 haproxy / apache 配置做了一些组合,当我使用没有配置文件上下文选择的简单反向代理配置时,它可以工作(除了我只有一个配置文件......):
https://www.foo.com/web/online
您是否已经遇到过此类行为?我使用 haproxy 1.8 和 apache httpd 2.4。
以下是我的 haproxy 配置:
frontend default
bind *:80
capture request header X-Forwarded-For len 15
acl rest_url path /api
acl rest_url path_beg /api/
acl app1_profile path_beg /test/company/app1
acl app2_profile path_beg /test/company/app2
use_backend app3 if rest_url
use_backend app1 if app1_profile
use_backend app2 if app2_profile
backend app1
cookie SERVERID insert indirect nocache httponly
#http-request redirect location http://test.domain.com%[url,regsub(^/web/,/test/company/app1/web/,)]%[query] if { path_beg /web/ }
#http-request set-var(txn.path) path
#http-response redirect location https://test.domain.com/test/company/app1/var(txn.path) if ! { path_beg /test/ }
#reqirep ^Host:\ .*$ Host:https://test.domain.com/test/company/app1/
server app1_backend 192.168.10.15:80
Apache 配置:
ProxyRequests On
ProxyPreserveHost On
<Location /test/company/app1/>
ProxyPass http://localhost:80/
ProxyPassReverse http://localhost:80/
</Location>
我花了几个小时尝试获得一个有效的配置,但仍然不起作用。我希望有人能帮助我。
谢谢,
塞巴斯蒂安