Como posso fazer proxy em um caminho de contexto específico?

Como posso fazer proxy em um caminho de contexto específico?

No momento, estamos realocando um aplicativo que usa contexto para selecionar "perfis" (definir propriedades do aplicativo e cadeia de conexão JDBC)

Por enquanto, a URL é deste tipo:https://www.foo.com/test/company/profil-name/ Então você é redirecionado parahttps://www.foo.com/test/company/profil-name/web/online Mas também há outras coisas, como contextos de API: https://www.foo.com/api/profile-name/

Eu sei que o aplicativo atual está usando Apache + haproxy no frontend e backend:

Web => apache => local haproxy => backend haproxy => application backend

Meu problema é que estou tentando reproduzir a mesma configuração aqui, mas o proxy não funciona bem (testo com um arquivo host modificado):

https://www.foo.com/test/company/profil-name/redireciona parahttps://www.foo.com/web/test/company/profil-name/online

É como se o contexto inicial fosse considerado uma string de opções pelo aplicativo.

Fiz algumas combinações na configuração haproxy/apache e quando uso uma configuração simples de proxy reverso sem seleção de contexto de perfis, está funcionando (exceto que tenho apenas um perfil...):

https://www.foo.com/web/online

Você já teve esse tipo de comportamento? Eu uso haproxy 1.8 e apache httpd 2.4.

Esta é a aparência da minha configuração do 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

Configuração do Apache:

   ProxyRequests On
   ProxyPreserveHost On

   <Location /test/company/app1/>
      ProxyPass http://localhost:80/
      ProxyPassReverse http://localhost:80/
   </Location>

Passei horas tentando ter uma configuração funcional, mas ainda não funciona. Espero que alguém possa me ajudar.

Obrigado,
Sebastião

informação relacionada