Problemas com a configuração do httpd para proxy da maioria das solicitações para o Tomcat

Problemas com a configuração do httpd para proxy da maioria das solicitações para o Tomcat

Tive alguma dificuldade em fazer o seguinte funcionar no Apache:

Temos uma instância do Apache/Tomcat atrás de um AWS ELB. O ELB está encerrando o SSL, então temos um redirecionamento no servidor para lidar com isso.

Preciso /healthestar acessível em http para que a verificação de integridade do ELB funcione.

Preciso enviar tudo o que não é /ou themepara o Tomcat, ou seja, /fooproxies para localhost:8080/foo.

Eu tentei algumas variações da configuração abaixo usando mod_proxy e/ou mod_rewrite, mas não consigo fazer isso funcionar corretamente, então agradeceria qualquer indicação.

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

O Tomcat está escutando na porta 8080 usando http simples.

Responder1

Tenho o Tomcat escutando ajp na porta 8009. Além de outras vantagens, isso permite que os mesmos hosts virtuais sejam definidos nas configurações de ambos os servidores, de forma que as solicitações (cujo padrão é a porta 80) cheguem primeiro ao Apache, onde tenho vários servidores virtuais. anfitriões definidos. As regras de proxy reverso decidem quais solicitações encaminhar para vários outros hosts (sejam hosts virtuais remotos ou locais), servir conteúdo de um DocumentRoot ou encaminhar para o Tomcat via ajp. Quando mod_proxy_ajp encaminha solicitações ao Tomcat, por padrão eles mantêm seus nomes de host, o que permite ao Tomcat direcioná-los para diferentes aplicativos da web com nomes de host virtuais correspondentes que defini em server.xml.

Os exemplos a seguir não fazem exatamente o que você descreveu, mas espero que mostrem a flexibilidade disponível com hosts virtuais em ambas as configurações de servidor e permitam que você crie configurações que atendam às suas necessidades.

/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/server.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>

informação relacionada