Problemas con la configuración httpd para representar la mayoría de las solicitudes a Tomcat

Problemas con la configuración httpd para representar la mayoría de las solicitudes a Tomcat

He tenido algunas dificultades para que lo siguiente funcione en Apache:

Tenemos una instancia de Apache/Tomcat detrás de un AWS ELB. ELB está realizando la terminación de SSL, por lo que tenemos una redirección en el servidor para manejar esto.

Necesito /healthestar disponible en http para que funcione la verificación de estado de ELB.

Necesito enviar todo lo que no lo es /o themea Tomcat, es decir, /fooservidores proxy a localhost:8080/foo.

Probé algunas variaciones de la siguiente configuración usando mod_proxy y/o mod_rewrite, pero parece que no puedo hacer que esto funcione correctamente, por lo que agradecería cualquier sugerencia.

<Location /health>
  ProxyPass http://localhost:8080/health ttl=1
  ProxyPassReverse http://localhost:8080/health
</Location>

<Location ~ "^/(.+)">
  RewriteEngine On
  RewriteCond %{HTTP:X-Forwarded-Proto} =https
  RewriteCond %{REQUEST_URI} !^/(health|theme)/
  RewriteRule . http://localhost:8080/$1 [P]
  ProxyPassReverse http://localhost:8080/$1
</Location>

<Location />
   RewriteEngine On
   RewriteCond %{REQUEST_URI} !^/health
   RewriteCond %{HTTP:X-Forwarded-Proto} =http
   RewriteRule . https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
</Location>

Tomcat escucha en el puerto 8080 usando http simple.

Respuesta1

Tengo Tomcat escuchando ajp en el puerto 8009. Aparte de otras ventajas, esto permite definir los mismos hosts virtuales en las configuraciones de ambos servidores, por lo que las solicitudes (que por defecto son el puerto 80) llegan primero a Apache, donde tengo varios servidores virtuales. hosts definidos. Las reglas de proxy inverso luego deciden qué solicitudes reenviar a otros hosts (ya sean hosts virtuales remotos u otros locales), servir contenido desde DocumentRoot o reenviar a Tomcat a través de ajp. Cuando mod_proxy_ajp reenvía solicitudes a Tomcat, de forma predeterminada mantienen sus nombres de host, lo que permite a Tomcat dirigirlas a diferentes aplicaciones web con nombres de host virtuales coincidentes que he definido en server.xml.

Los siguientes ejemplos no hacen exactamente lo que ha descrito, pero espero que muestren la flexibilidad disponible con los hosts virtuales en ambas configuraciones de servidor y le permitan crear configuraciones que satisfagan sus necesidades.

/etc/apache2/extra/vhosts.conf

<VirtualHost *:80>
    ServerName my.local.website.com
    <Proxy *>
        Require all granted
    </Proxy>
#   proxy specific paths to other virtual hosts
    ProxyPass         /articles  http://a.local.website.com/articles
    ProxyPassReverse  /articles  http://a.local.website.com/articles
    ProxyPass         /entertainment  http://b.local.website.com/entertainment
    ProxyPassReverse  /entertainment  http://b.local.website.com/entertainment
#   send everything else to tomcat via ajp on port 8009
    ProxyPass         /  ajp://localhost:8009/
    ProxyPassReverse  /  ajp://localhost:8009/
</VirtualHost>

$CATALINA_HOME/servidor.xml

<Host name="my.local.website.com" appBase="temp" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve"
    prefix="website_access." suffix=".log" pattern="common"/>
</Host>

información relacionada