Wie bekomme ich 5,5 Kater hinter Apache 2 mit mod_rewrite, die durch Anfragen laufen App Kontext mod_jk und Strippen?

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

Frage

Ok, so mag ich ein Webapp in tomcat Laufen zu bringen (5.5) hinter Apache 2 zu laufen (2.2.3 genau zu sein) aus der Wurzel der Site dienen (dh ohne Rahmen), mit statischen Inhalten serviert über apache.

Also, wenn die App unter „/myapp“ auf tomcat läuft Ich mag Apache verwenden (plus mod_rewrite), um es als zu machen verhalten, wenn sie stattdessen unter „/“ ausgeführt wird.

Mod_jk ist Setup und arbeitet ok. Ich kann die App von „/myapp“ zugreifen, aber ich kann nicht ganz das letzte Stück zum Laufen bringen. Im Folgenden finden Sie die Config-I für mod_rewrite haben diese Funktion zu versuchen und zu erhalten. Es wird richtig umschreibt Urls /static/ Apache, um sie aus dem entpackten Webapp zu dienen und wenn ich das Umschreiben log ich sehe ermöglichen, dass sie versucht hat, durch alle anderen Anfragen passieren über /myapp mod_jk. Allerdings scheint es, dass mod_jk die Anforderung nicht verarbeitet danach.


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]

Wenn ich mit dieser Apache-1 in der Vergangenheit getan habe ich habe vor mod_jk geladen wird, um sicherzustellen, mod_rewrite zu bekommen, aber ich kann das nicht scheinen unter Apache zu erreichen 2. Irgendwelche Gedanken? Wie andere Menschen dies in der Regel tun?

War es hilfreich?

Lösung

Managed diese Arbeit am Ende zu bekommen. Es scheint, dass ich eine JkOption setzen müssen:


JkOptions     +ForwardURICompat

Und dann sieht mod_jk auf neu geschrieben URL. Muss nicht zu 100% zugeben, sicher recht, warum dies funktioniert, aber ich glaube, es ist eine ältere Form des Verhaltens ist zurückkehrt. Wenn jemand mir einen besseren / mehr richtiger Weg, dies zu tun, kann sagen, ich würde gerne wissen.

Andere Tipps

besser Kann Proxy Apache anstelle von mod_jk. So etwas wie folgt aus:

Proxypass / static / http: // localhost: 8080 / myapp / static /

Es könnte einfacher oder transparent sein, was passiert, wenn Sie entweder Virtual Hosts Tomcat verwenden oder verschiedene Anschlüsse für verschiedene Hosts und nur root Anwendungen bereitstellen (unter „/“) und Setup Apache mod_jk zu den verschiedenen Anschlüssen oder virtuellen Hosts weitergeleitet werden.

Hinweis: Wenn ich das brauchte ich mit verschiedenen Anschlüssen für verschiedene tomcat Hosts oder Motoren (kann mich nicht erinnern) und eingesetzt ROOT-Anwendungen gearbeitet haben. Ich habe noch nie virtuellen Hosts (Name basiert) in tomcat versucht, nur zu raten, dass dies funktionieren könnte.

Vorteil: kein Pfad Übersetzung, so viel einfacher zu verstehen, sobald Sie Änderungen an den Installations Monate nach dem ersten Einsatz machen müssen

.

Ich gebe zu, es fühlt sich etwas seltsam, aber der Nutzen der Lesbarkeit ist mir sehr viel wert.

Wir verwenden den 'R' Flag anstelle von 'PT':

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

Edit: Ich habe den Punkt nicht die URL zu ändern, der Benutzer sieht. Eine alternative Möglichkeit ist zu tun:

JkMount /* worker1
JkUnmount /static/* worker1

Dann wirst du nicht die RewriteRule der benötigen.

Und nach Apache Tomcat Die neuen Standardeinstellungen des mod_jk unvereinbar sind mit mod_rewrite und Sie sollten +ForwardURICompatUnparsed verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top