Qual é o uso da diretiva ProxyPassReverse

8

A definição de apache.org diz:

Essa diretiva permite que o Apache httpd ajuste a URL nos cabeçalhos Location, Location-Content e URI nas respostas de redirecionamento HTTP. Isso é essencial quando o Apache httpd é usado como proxy reverso (ou gateway) para evitar ignorar o proxy reverso devido aos redirecionamentos HTTP nos servidores de back-end que ficam atrás do proxy reverso.

Somente os cabeçalhos de resposta HTTP especificamente mencionados acima serão reescritos. O Apache httpd não reescreverá outros cabeçalhos de resposta nem, por padrão, reescreverá as referências de URL nas páginas HTML. Isso significa que, se o conteúdo em proxy contiver referências absolutas de URL, ele ignorará o proxy. Para reescrever o conteúdo HTML para corresponder ao proxy, você deve carregar e ativar o mod_proxy_html.

path é o nome de um caminho virtual local; url é uma URL parcial para o servidor remoto. Esses parâmetros são usados ​​da mesma maneira que para a diretiva ProxyPass.

Alguém pode me explicar como funciona. Em geral, o que faz essa diretiva?

SnowmanOnFire
fonte

Respostas:

8

Se o servidor que realmente gerencia uma solicitação faz um redirecionamento para uma URL diferente nesse servidor, a ProxyPassReversediretiva reescreve a URL em termos do servidor proxy reverso. Por exemplo, conforme observado na documentação do Apache , se:

 http://reverseproxy.com/mirror/foo/bar

é enviado (proxy reverso) para

 http://backend.example.com/bar

para manipulação, mas no servidor back-end é determinado que o URL correto deveria ter sido quux, ou seja, que a solicitação deve ser redirecionada para

 http://backend.example.com/quux

a ProxyPassReversediretiva reescreve a URL (no proxy reverso) para

 http://reverseproxy.com/mirror/foo/quux

antes de encaminhar a resposta de redirecionamento HTTP para o cliente. Dessa forma, o cliente conhece apenas o servidor proxy reverso, mas ainda assim pode fazer a solicitação necessária para a URL correta, http://reverseproxy.com/mirror/foo/quuxque será então submetida a proxy reverso para o servidor back-end e manipulada normalmente. Em resumo, ele apenas permite que o proxy reverso retorne os cabeçalhos URI corretos nas respostas de redirecionamento HTTP.

Potro
fonte
Não está claro o que does a redirectrealmente significa. Ele responde com uma resposta de redirecionamento HTTP (301/302)?
Chris Stryczynski 12/08/19
Ele responderá com algum código 3xx, como "[a] classe de código de status 3xx (Redirecionamento) indica que outras ações precisam ser executadas pelo agente do usuário para atender à solicitação". Veja RFC 7231, discutindo o redirecionamento . A ProxyPassReversediretiva simplesmente garante que a resposta HTTP 3xx inclua o URI correto em termos do servidor proxy reverso.
Colt
0

No guia de proxy reverso do Apache 2.4 :

Para garantir que, e Location: os cabeçalhos gerados a partir do back-end sejam modificados para apontar para o proxy reverso, em vez de voltar para si, a diretiva ProxyPassReverse é mais frequentemente necessária:

ProxyPass "/" " http://www.example.com/ "

ProxyPassReverse "/" " http://www.example.com/ "

Se você possui um Cliente e 2 servidores, Proxy e Origin, em que o Origin faz o trabalho real (gerando resposta) e o Proxy solicita apenas proxies ao Origin, uma boa arquitetura de servidor é quando

  1. O Origin não conhece o Proxy
  2. e cada solicitação passa pelo Proxy.

Se o Origin não souber sobre o Proxy, pode acontecer que o Origin retorne ao Cliente um redirecionamento HTTP (HTTP 301 ou 302) através do Proxy, que aponta diretamente para ele mesmo, o Origin. E isso é um problema, porque o navegador entrará em contato diretamente com o Origin na próxima rodada, o que violaria o ponto 2.

Como as respostas de redirecionamento HTTP retornam ao Proxy em direção ao Cliente, o Proxy pode / deve modificar esses redirecionamentos para que o Local ainda aponte para Proxy. Dessa forma, um aplicativo autônomo em execução no Origin que não tenha conhecimento do Proxy pode gerar qualquer URL de redirecionamento, desde que o Proxy esteja bem configurado.

karatedog
fonte