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 /health
estar acessível em http para que a verificação de integridade do ELB funcione.
Preciso enviar tudo o que não é /
ou theme
para o Tomcat, ou seja, /foo
proxies 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>