Hallo zusammen,
ich bin gerade dabei meine verschiedenen HTTP Server (mit diversen Anwendungen dahinter) in meinem Heimnetz, welche ich bis dato per NAT über meinen Router ansprach, nun aus diversen Gründen (z.B. um alle über den Standard-HTTPS Port 443 ansprechen zu können) über einen reverse Proxy ansprechen zu wollen. Ergo hab ich mir auf einem Server apache mit mod_rewrite, mod_proxy, mod_proxy_http und mod_proxy_html (wobei ich hoffe letzteres nicht nutzen zu müssen) aufgesetzt, ProxyRequests natürlich ausgeschaltet 😉 und dann angefangen Proxyregeln zu definieren mit dem Ziel über Unterverzeichnisse die Requests auf den Server, welcher die entsprechende Anwendung hostet zu verweisen.
Mein Problem an dieser Stelle ist, dass dies nur für das root-Directory auf dem Proxy korrekt funktioniert. Für Subdirectores werden die Pfade die die Anwendung zurückliefert nicht korrekt aufgelöst, sodass etliche Java-Script Methoden nicht funktionieren und die korrekten CSS und Image Includes auch erst nach Nutzung von mod_proxy_html mit ProxyHTMLURLMap angezogen werden.
So, das klingt jetzt so formuliert sicher erstmal verwirrend, darum jetzt mal mit dem konkreten Fallbeispiel. Hier der wichtige Auszug aus meiner Apache Konfiguration in sites-enabled:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <VirtualHost *:443> ServerAdmin admin@...net SSLCertificateFile /etc/ssl/certs/server.crt SSLCertificateKeyFile /etc/ssl/private/server.key SSLCertificateChainFile /etc/ssl/certs/intermediate.crt SSLProxyEngine On RewriteEngine On ProxyPreserveHost On ProxyPass /file/ https://192.168.0.20:7001/ ProxyPassReverse /file/ https://192.168.0.20:7001/ ProxyPass / https://192.168.0.50:5001/ ProxyPassReverse / https://192.168.0.50:5001/ |
In beiden Fällen, also wenn ich https://reverseproxy/ oder https://reverseproxy/file/ angebe, werde ich auf den korrekten Server umgeleitet. Unter https://reverseproxy/ funktioniert auch alles tadellos, unter https://reverseproxy/file/ werden jedoch alle Includes nicht korrekt angezogen.
Ich habe erst versucht dies mit mod_proxy_html zu lösen, was dann so aussah:
1 2 3 4 5 6 7 8 | ProxyPass /file/ https://192.168.0.20:7001/ ProxyHTMLURLMap https://192.168.0.20:7001 /file <Location /file/> ProxyPassReverse https://192.168.0.20:7001/ SetOutputFilter INFLATE;proxy-html;DEFLATE ProxyHTMLURLMap / /file/ ProxyHTMLURLMap /file /file </Location> |
Dies führte immerhin dazu, dass die Includes korrekt durchgeführt wurden, jedoch funktionierten etliche Java-Script aufrufe nicht, sodass die Applikation letzten Endes doch unbrauchbar war. Auch mit den Einstellungen ProxyHTMLExtended und ProxyPreserveHost habe ich experimentiert, jedoch ohne Ergebnisse.
Einfach ließe sich dies über zusätzliche Virtual Hosts lösen, die jeweils eine andere Subdomain abfangen. Jedoch habe ich kein gesigntes Zertifikat für diese Subdomains (leider erforderlich) sodass, ich diesen Weg nicht gehen kann.
Gibt es einen anderen Weg, wie ich sicherstellen kann, dass wirklich alle root relative Links (auch in Scripts) unter dem Subdirectory angewandt werden, wenn ich über dies einen Request per ProxyPass route?
Ich bin hier über jeden Tipp dankbar. Wenn ich mich zu unklar ausgedrückt haben sollte oder der Use-Case noch nicht klar ist bitte nachfragen. Danke bereits im Voraus.