Configuração do proxy reverso do Apache

Configuração do proxy reverso do Apache

Então eu tenho uma caixa Debian 9 rodando o Apache 2.4.25

Gostaria que o Apache também servisse conteúdo da web de outro servidor (http://192.168.1.100:8088) na rede; Eu configurei o mod_proxy para fazer isso, mas estou lutando para fazer as coisas funcionarem.

Esta configuração parece estar quase funcionando, pois recebo algum conteúdo de erro do servidor correto. Parece que há um problema de URL com o endpoint app1 sendo anexado ao URL, talvez? na verdade, esse endpoint não existe em lugar nenhum e é usado apenas para capturar solicitações.

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    ProxyPreserveHost On
    ProxyRequests Off
    <proxy *>
      Order deny,allow
      Allow from all
    </proxy>
    ProxyPass /app1 http://192.168.1.100:8088/
    ProxyPassReverse /app1 http://localhost/
</virtualHost>

Se eu tentar fazer proxy de todas as solicitações dessa forma, tudo funcionará bem, mas claramente não consigo acessar nenhum recurso no host local.

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    ProxyPreserveHost On
    ProxyRequests Off
    <proxy *>
      Order deny,allow
      Allow from all
    </proxy>
    ProxyPass / http://192.168.1.100:8088/
    ProxyPassReverse / http://localhost/
</virtualHost>

Acho que talvez precise realizar algum tipo de ReWrite? Não tenho muita experiência com o Apache mod_proxy.

:-(

Responder1

Conforme mencionado nos comentários, você tem pelo menos dois problemas aparentes:

  1. As barras de “terminação” em cada indivíduo ProxyPasse ProxyPassReversedeclaração precisam corresponder.

  2. ProxyPasse ProxyPassReverseprecisa se referir ao mesmo host.

Então, no seu primeiro exemplo:

ProxyPass /app1 http://192.168.1.100:8088/
ProxyPassReverse /app1 http://localhost/

Deveria estar:

ProxyPass /app1 http://192.168.1.100:8088
ProxyPassReverse /app1 http://192.168.1.100:8088

Ou:

ProxyPass /app1 http://localhost
ProxyPassReverse /app1 http://localhost

Para o seu segundo exemplo, /é considerada uma barra de “terminação” para os fins mencionados aqui. Então:

ProxyPass / http://192.168.1.100:8088/
ProxyPassReverse / http://localhost/

Simplesmente precisa ter os hosts correspondentes:

ProxyPass / http://192.168.1.100:8088/
ProxyPassReverse / http://192.168.1.100:8088/

Ou:

ProxyPass / http://localhost/
ProxyPassReverse / http://localhost/

Notas

  • Provavelmente vale a pena mencionar que a maneira como o Apache lida com os URLs que ele faz proxy /pode obter melhores resultados do que /app1depender de como o aplicativo receptor constrói seus próprios URLs.

  • Talvez seja necessário fazer proxy de vários URLs, dependendo de como o aplicativo receptor funciona.

  • Você pode querer habilitar mod_proxy_htmle mod_proxy_httpainda por cima mod_proxyse eles ainda não estiverem habilitados por algum motivo.

informação relacionada