Ich habe einen Apache2-Webserver, der den Reverse-Proxy für die auf einem anderen Computer ausgeführte Rails3-App verwaltet.
Das Setup funktioniert, außer dass die innerhalb der Webanwendung generierten URLs von meiner Konfiguration für mod_proxy_html nicht umgeschrieben werden.
Der„Reverse-Proxy-Szenario“ist genau das, was ich versuche, also habe ich das Tutorial so genau befolgt, wie ich konnte.
Ich habe Antworten angewendet oder ausprobiertHierauf Stackoverflow, ohne Wirkung.
Gemäß dem "Reverse Proxy Szenario" möchten Sie eine Reihe von Modulen laden. Alle diese Anweisungen befinden sich in meiner httpd.conf-Datei und wenn ich die Ausgabe von
apactectl -t -D DUMP_MODULES
Alle erforderlichen Module werden in der Liste angezeigt.
Mein externer Webserver, der als Reverse-Proxy fungiert, befindet sich unter www.ourdomain.org und die Rails-App ist intern unter apphost.local verfügbar (der Server ist Mac OS X Server 10.6, der Rails-App-Server ist Mac OS X 10.6).
Was derzeit funktioniert, ist der Zugriff auf die Webanwendung über den Reverse-Proxy wie folgt:
http://www.ourdomain.org/apphost/railsappname/controllername/action
Es werden jedoch keine JavaScript-Dateien, CSS-Dateien oder anderen Assets geladen und bei internen Links zur Web-App fehlt der Apphost-Teil der URL, als ob meine Umschreiberegel falsch konfiguriert wäre (also habe ich mich natürlich darauf konzentriert und kriege es nicht hin, dass beim Übergeben des HTML vom Apphost und vom Apache-Server etwas hinzugefügt oder gelöscht wird).
Wenn Sie beispielsweise mit der Maus über einen Aktionslink im von der Web-App zurückgegebenen HTML fahren, erhalten Sie Folgendes:
http://www.ourdomain.org/railsappname/controllername/action
So sehen meine Apache-Direktiven aus:
LoadModule proxy_html_module /usr/libexec/apache2/mod_proxy_html.so
LoadModule xml2enc_module /usr/libexec/apache2/mod_xml2enc.so
ProxyHTMLLogVerbose On
LogLevel Debug
ProxyPass /apphost/ http://apphost.local/
<Location /apphost/>
SetOutputFilter INFLATE;proxy-html;DEFLATE
ProxyPassReverse /
ProxyHTMLExtended On
ProxyHTMLURLMap railsappname/ apphost/railsappname/
RequestHeader unset Accept-Encoding
</Location>
Nach jeder Änderung, die ich an httpd.conf vornehme, überprüfe ich der Sicherheit halber gewissenhaft apachectl -t.
Ich bin definitiv kein Apache-Experte, aber alle Anweisungen, die meinen folgen, scheinen das, was ich hier mache, nicht außer Kraft zu setzen. Aber dann scheint nichts, was ich versuche, die URLs zu ändern, die ich in meinem Browser sehe, nachdem ich den Apache-Server mit einer Anfrage für meine Web-App kontaktiert habe.
Auch wenn Sie nicht sagen können, was ich falsch gemacht habe, würde ich mich über Ideen freuen, wie ich Apache dazu bringen kann, zu erkennen, woran es arbeitet und was es mit dem HTML macht, das von meiner Webanwendung kommt. So habe ich die Einrichtung von ProxyHTMLLogVerbose On und LogLevel Debug verstanden, aber ich sehe nichts in den Protokolldateien.
Antwort1
Vielleicht eine etwas vereinfachte Antwort, aber die meisten (wenn nicht alle) ProxyHTMLURLMap-Direktiven, die ich bisher gesehen habe, haben ein / am Anfang des Match/Replace-Musters. Haben Sie diese Variante Ihrer Konfiguration ausprobiert?
ProxyHTMLURLMap /railsappname/ /apphost/railsappname/
Wenn das nicht hilft, welche Version von Apache verwenden Sie? Und wenn zutreffend, welche Version des Moduls? Es ist erst seit Apache 2.4 im Lieferumfang von Apache enthalten, für ältere Versionen von Apache müssen Sie dieses Modul (oder eine Version davon) also selbst installiert haben.
Alternativ können Sie auch zu mod_substitute wechseln, obwohl dies mehr Konfiguration erfordert als mod_proxy_html.
Irgendwann haben sie eine integrierte Konfiguration entfernt, die Sie nun selbst hinzufügen müssen. Siehehttp://apache.webthing.com/svn/apache/filters/proxy_html/proxy_html.conf, die Anweisungen ProxyHTMLLinks und ProxyHTMLEvents sind diejenigen, die Sie zu Ihrer Konfiguration hinzufügen müssen.