Configuración del proxy inverso de Apache

Configuración del proxy inverso de Apache

Tengo una caja Debian 9 ejecutándose con Apache 2.4.25.

Me gustaría que Apache también sirviera contenido web desde otro servidor (http://192.168.1.100:8088) En la red; Configuré mod_proxy para hacer esto, pero tengo dificultades para que todo funcione.

Parece que esta configuración está casi funcionando ya que recibo algún contenido de error del servidor correcto, parece que hay un problema de URL con el punto final app1 agregado a la URL, ¿quizás? este punto final en realidad no existe en ninguna parte y solo se usa para capturar solicitudes.

<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>

Si intento enviar todas las solicitudes por proxy, funciona bien, pero claramente no puedo acceder a ningún recurso en localhost.

<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>

Creo que quizás necesito realizar algún tipo de reescritura. No tengo mucha experiencia en el uso de Apache mod_proxy.

:-(

Respuesta1

Como se menciona en los comentarios, tiene al menos dos problemas aparentes:

  1. Las barras "de terminación" en cada individuo ProxyPassy ProxyPassReversedeclaración deben coincidir.

  2. ProxyPassy ProxyPassReversenecesita hacer referencia al mismo host.

Entonces, en tu primer ejemplo:

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

Debiera ser:

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

O:

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

Para el segundo ejemplo, /se considera una barra diagonal "de terminación" para los fines mencionados aquí. Entonces:

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

Simplemente necesita que los hosts coincidan:

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

O:

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

Notas

  • Probablemente valga la pena mencionar que la forma en que Apache maneja las URL que representa, /puede obtener mejores resultados que /app1dependiendo de cómo la aplicación receptora construye sus propias URL.

  • Es posible que necesites proxy de varias URL dependiendo de cómo funcione la aplicación receptora.

  • Es posible que desees habilitar mod_proxy_htmly mod_proxy_httpademás mod_proxysi aún no están habilitados por algún motivo.

información relacionada