O proxy reverso do Apache me stumping com redirecionamentos

1

Eu configurei uma série de aplicativos da web, que, para fins de segurança, só são acessíveis diretamente por meio do host local, com cada serviço conectado a uma porta diferente. Para tornar esses aplicativos acessíveis externamente, um proxy reverso está sendo configurado através do apache. Ele foi executado sem problemas até adicionar outro aplicativo hoje, que está encaminhando após o acesso inicial (não sei por que método, porém, eu não tenho acesso ao código que está fazendo o redirecionamento) de uma maneira tal que "proxyHost / barra / "está redirecionando para" proxyHost / search / "em vez de" proxyHost / bar / search / "

Eu examinei meu script para configurar o proxy várias vezes e tentei diferentes abordagens sobre o qual li on-line e nenhuma delas está funcionando para mim. Eu agora ligo para vocês por ajuda, eu sinto muito se esta é uma pergunta rudimentar ou se há uma falha óbvia na minha configuração. Eu sou muito novo no apache.

Obrigado!

Aqui está a configuração atual:

 ProxyRequests Off
 ProxyPreserveHost On
 ProxyHTMLEnable On

 <Proxy *>
   Order allow,deny
   Allow from all
 </Proxy>

 ProxyPass /foo/ http://localhost:1234/
 ProxyHTMLURLMap http://localhost:1234 /foo

 <Location /foo/>
   ProxyPassReverse  http://localhost:1234/
   ProxyHTMLURLMap /          /foo/
   ProxyHTMLURLMap /foo      /foo
 </Location>

 ProxyPass /bar/ http://localhost:5678/search
 ProxyHTMLURLMap http://localhost:5678/ /bar

 <Location /bar/>
   ProxyPassReverse http://localhost:5678/
   ProxyHTMLURLMap /            /bar/
   ProxyHTMLURLMap /bar     /bar
 </Location>
    
por Zachary Yamada 15.08.2012 / 23:58

2 respostas

2

Para reafirmar seu problema:

Você instalou um novo aplicativo "backend" e o tornou acessível em /bar no seu host front-end. O acesso ao aplicativo resulta em um redirecionamento para /search em vez de /bar/search .

Isso geralmente acontece porque o aplicativo de backend não sabe nada sobre o caminho de frontend sob o qual você o acessa e gera URLs absolutas (versus relativas). Existem algumas maneiras de resolver esse problema:

  • Alguns aplicativos permitem configurar um URL base que eles usarão ao gerar links absolutos. Esta é a solução mais fácil se estiver disponível; você definiria o URL base como http://frontendhost/bar .
  • Se você não conseguir configurar ou modificar o aplicativo, precisará filtrar o HTML gerado para reescrever links. Isso é (explicitamente) o que o mod_proxy_html serve. Note que para o Apache 2.4 e ótimo, mod_proxy_html é [incluído] [] como um módulo padrão; para versões anteriores do Apache, você precisará instalá-lo separadamente.

A documentação do mod_proxy_html tem alguns bons exemplos.

    
por 16.08.2012 / 02:20
0

Tente algo como:

ProxyPassReverse /bar/ http://backend.example.com/search/

como ProxyPassReverse é o que o cabeçalho reescreve e seu novo aplicativo é um pouco diferente no backend como está hospedado em / search e não / como sua configuração anterior

* edit Desculpe eu não usei mod_proxy_html antes, mas o mesmo vale para suas diretivas ProxyHTMLURLMap. A necessidade de mapear de / search para / bar também.

    
por 16.08.2012 / 12:42