Come faccio a far funzionare tomcat 5.5 dietro apache 2 con mod_rewrite passando attraverso le richieste a mod_jk e rimuovendo il contesto dell'app?

StackOverflow https://stackoverflow.com/questions/208261

Domanda

Ok, quindi voglio far funzionare una webapp in tomcat (5.5) dietro apache 2 (2.2.3 per essere precisi) che serve dalla radice del sito (cioè senza il contesto), con contenuto statico offerto tramite apache.

Quindi, se l'app è in esecuzione sotto " / myapp " su tomcat voglio usare apache (più mod_rewrite ) per farlo funzionare come se fosse in esecuzione sotto " / " invece.

Mod_jk è configurato e funziona correttamente. Posso accedere all'app da " / myapp " ;, ma non riesco proprio a far funzionare l'ultimo bit. Di seguito è la configurazione che ho per mod_rewrite per provare a farlo funzionare. Ottiene correttamente riscrive gli URL / static / per ottenere apache per servirli dalla webapp decompressa e se abilito il registro di riscrittura vedo che tenta di passare attraverso tutte le altre richieste a / myapp tramite mod_jk . Tuttavia sembra che mod_jk non stia elaborando la richiesta in seguito.


JkMount /myapp/*      worker1

RewriteEngine On

# ensure static stuff gets served by apache
RewriteRule ^/static/(.*)$ /var/lib/tomcat5.5/webapps/myapp/static/$1 [L]
# everything else should go through tomcat
RewriteRule ^/(.*)$ /myapp/$1 [L,PT]

Quando ho fatto questo con Apache 1 in passato, dovevo assicurarmi che mod_jk fosse caricato prima di mod_rewrite , ma non riesco a raggiungere questo sotto apache 2. Qualche pensiero? Come fanno gli altri a farlo di solito?

È stato utile?

Soluzione

Gestito per farlo funzionare alla fine. Sembra che devo impostare una JkOption su:


JkOptions     +ForwardURICompat

E poi mod_jk guarda l'URL riscritto. Devo ammettere che non è sicuro al 100% del perché funzioni, ma credo che stia tornando a una forma di comportamento più vecchia. Se qualcuno può dirmi un modo migliore / più corretto di farlo, mi piacerebbe saperlo.

Altri suggerimenti

Potrebbe essere meglio usare Apache per proxy invece di mod_jk. Qualcosa del genere:

ProxyPass / static / http: // localhost: 8080 / myapp / static /

Potrebbe essere più semplice o più trasparente cosa succede se si utilizza Tomcat Virtual Hosts o connettori diversi per host diversi e si distribuiscono semplicemente applicazioni root (in " / ") e si imposta Apache mod_jk inoltro ai diversi connettori o host virtuali .

Nota: quando ne avevo bisogno, ho lavorato con connettori diversi per host o motori Tomcat diversi (non ricordo) e ho distribuito applicazioni ROOT. Non ho mai provato host virtuali (basati sul nome) in Tomcat, solo supponendo che potesse funzionare.

Vantaggio: nessuna traduzione del percorso, quindi molto più facile da capire una volta che è necessario apportare modifiche all'installazione mesi dopo la distribuzione iniziale.

Lo confesso, sembra un po 'strano, ma il beneficio della leggibilità vale molto per me.

Usiamo il flag 'R' invece di 'PT':

RewriteRule ^/(.*)$ /myapp/$1 [L,R]

Modifica Ho perso il punto di non modificare l'URL che l'utente vede. Un modo alternativo è fare:

JkMount /* worker1
JkUnmount /static/* worker1

Quindi non avrai bisogno di RewriteRule's.

E secondo Sito Apache Tomcat le nuove impostazioni predefinite del mod_jk non è compatibile con mod_rewrite e dovresti usare + ForwardURICompatUnparsed .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top