fragen stichworte

apache - mod_rewrite + mod_proxy arbeitet im Staging, arbeitet nicht in der Produktion (Option [P] wird ignoriert)

Ich habe in meinem virtuellen Apache-Host eine Umleitung eingerichtet, die mehrere Subdomains bedient - nennen Sie sie "a.example.com" und "b.example.com" - und geben Sie einen Ruby on Rail-App ab.

Ich habe in meiner Virtualhost-Konfigurationsdatei folgende Regel:

rewriteEngine on
rewriteRule proxy/(.+)$ http://news.example.com/$1 [P]

Die Idee ist, dass ich http://a.example.com/proxy/news/a tun und den Inhalt von http://news.example.com/news/a abrufen kann, aber innerhalb derselben Subdomain glaubt ajax nicht, dass meine Ajax-Anforderungen domänenübergreifend sind - Weitere Informationen zu dieser SO Frage.

Das Problem ist, dass es zwar in meiner Inszenierungsumgebung gut funktioniert, aber nicht in Produktion ist!

Beide Server sind Ubuntu-Server 10.04. Apache stammte aus den Standard-Ubuntu-Repos mit apt-get install.

Ich habe einen Unterschied zwischen dem ganzen/etc/apache2/dir gemacht und der einzige Unterschied ist der Servername.

Wenn ich die letzte Option in [L] ändere, erhalte ich eine Weiterleitung, daher denke ich, dass mod_rewrite funktioniert. Es spricht einfach nicht mit mod_proxy.

Wenn Sie die Protokolle (/var/log/apache2 und das Schienenprotokoll) betrachten, scheint es, als würde die Umschreibungsregel in der Produktion einfach ignoriert - die Protokolle sind genau so, als wären sie nicht da.

Wie kann ich das debuggen? Kann ich zwingen, dass Apache mir weitere Informationen gibt, warum diese bestimmte Regel nicht durchgesetzt wird, wenn ich auf /proxy zugreifen?

antworten

Nachdem wir RewriteLog wie von larsks vorgeschlagen durchgesehen haben, haben wir festgestellt, dass Apache tatsächlich die Weiterleitungen gemacht hat - das Problem war woanders.

Tatsächlich war es das Modul, das wir benutzten, um mit Ruby - Phusion Passenger umzugehen.

Wir hatten eines von denen "OMG der Server ist down!" Wir haben versucht, die Variable PassengerHighPerformance auf on zu setzen.

Leider bedeutet diese Einstellung grundsätzlich "ignoriere mod_rewrite":)

Jetzt haben wir es ein bisschen ausgeblendet - es ist an allen Stellen eingeschaltet, außer wenn sie mit /proxy beginnen:

PassengerHighPerformance On
...
<location/proxy>
  PassengerHighPerformance Off
</location>

Sobald wir diese Konfigurationsoption zu unserer Konfigurationsdatei hinzugefügt haben, haben die Dinge wieder funktioniert!

Wenn du über Google hierher kommst und das nützlich findest, lade bitte Larsks Kommentar zum OP hoch. Sein Kommentar hat uns auf den richtigen Weg gebracht.