Como fazer com que o Tomcat 8.5 RewriteValve funcione com o AJP1.3 JKMount?

1

Premissa

Em um servidor Ubuntu 16.04 com o Apache2 mais recente instalado, tenho Hosts Virtuais diferentes, cada um configurado corretamente (e protegido com Let's Encrypt):

  • /etc/apache2/sites-enabled/my.site.com-le-ssl.conf
  • /etc/apache2/sites-enabled/my.other.site.com-le-ssl.conf

apontando para conteúdo estático em:

  • /var/www/my.site.com/
  • /var/www/my.other.site.com/

Isso funciona bem :
chamando https://my.site.com/ Vejo o site estático contido em /var/www/my.site.com/ .

Eu então instalei o Tomcat 8.5 .9 e assegurou-o com um proxy reverso , portanto, adicionando:

<VirtualHost *:443>
    . . .
    JKMount /* ajp13_worker
    . . .
</VirtualHost>

para / etc / apache2 / sites-enabled / meu.site.com-le-ssl.conf .

Isso também funciona bem :
chamando https://my.site.com/ agora vejo o Tomcat em casa.

meta desejada

Eu quero alcançar o seguinte resultado:

  • chamando https://my.site.com/ Eu quero ver o site estático ( /var/www/my.site.com/ );
  • chamando https://my.site.com/dynamic e quero ver o Tomcat em casa; chamando https://my.site.com/dynamic/myApp Espero executar myApp.war publicado em tomcat/webapps ;

Tentativa de solução

Minha ideia foi a seguinte:

  • faça com que o Apache JKMount-ing apenas as solicitações com o contexto /dynamic , portanto, em vez de:

    <VirtualHost *:443>
        . . .
        JKMount /* ajp13_worker
        . . .
    </VirtualHost>
    

    eu usei:

    <VirtualHost *:443>
        . . .
        JKMount /dynamic/* ajp13_worker
        . . .
    </VirtualHost>
    

e isso parece funcionar , no lado do Apache; chamando my.site.com abrirá o conteúdo estático, enquanto chamando o my.site.com/dynamic dará o Tomcat 404.

Agora preciso reescrever o URL para remover o contexto dynamic , para torná-lo transparente para o Tomcat, e tentei durante as últimas três horas fazer isso com o RegravarValvaTomcat :

  • Eu editei tomcat/conf/server.xml adicionando a Válvula:

    <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
        . . .
        <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
    </Host>
    
  • Eu criei um arquivo tomcat/conf/Catalina/localhost/rewrite.config , contendo a regra correta (testado aqui ):

    RewriteRule ^dynamic/(.+)$ /$1
    

Por algum motivo, isso não funciona. A regra RewriteValve do Tomcat é ou ignorada, ou com mau funcionamento, ou há algo errado na maneira que eu pensava a coisa toda ... Eu não sou um administrador de sistema, então eu não ficaria surpreso com algum erro ingênuo aqui.

Você vê onde está o problema? Ou outra maneira de fazer isso funcionar?

    
por Andrea Ligios 03.05.2017 / 17:39

1 resposta

1

Eu o resolvi usando mod_proxy_ajp em vez de mod_jk .

Apache my.site.com-le-ssl.conf

<VirtualHost *:443>
    . . .
    ProxyPass        /dynamic/ ajp://localhost:8009/
    ProxyPassReverse /dynamic/ ajp://localhost:8009/
    . . .
</VirtualHost>

Rewrite.config do Tomcat

RewriteRule ^dynamic(.+)$ dynamic/$1/ [R]

Agora funciona como desejado.

    
por 04.05.2017 / 17:46