Ich versuche, einen Proxy in einem Apache-Webserver einzurichten, habe aber ein Problem mit dem Aufbau der URL, da in der resultierenden URL ein Teil des Pfads fehlt. Ein Beispiel:
http://server/webapp/style.css
(erwartet)
http://server/style.css
(tatsächliches Ergebnis)
Ich habe einen Server, der im Web verfügbar ist (den ich Frontendserver nennen werde) und einen weiteren Server (Backendserver) in einem internen Netzwerk (nicht vom Web aus zugänglich), auf dem sich die Webanwendung befindet, die ich nach außen per Proxy senden möchte. Ich habe einige Methoden ausprobiert und das Hauptproblem besteht darin, dass die URL im Proxy nicht richtig (neu) geschrieben wird, dem Server oder Browser fehlt ein Teil.
Was ich versucht habe:
ProxyPass /webapp http://backendserver
ProxyPassReverse /webapp http://backendserver
Die URL der App im Browser ist korrekt http://frontendserver/webapp
; dieHauptseiteist sichtbar, aber alle angehängten Ressourcen (JS, Sockets, CSS usw.) fehlen, da ihre URLs http://frontendserver/style.css
statt lauten http://frontendserver/webapp/style.css
.
Ist dies die richtige Methode, um diesen Proxy-Typ ordnungsgemäß einzurichten?
Ich habe auch eine andere Lösung mit dem Apache-Rewrite-Modul ausprobiert, bin aber zu keinem guten Ergebnis gekommen. Vielleicht hat jemand einen guten Vorschlag zur Lösung des Problems.
Danke
Antwort1
ProxyPass
ändert die Art und Weise, wie URLs beantwortet werden, schreibt aber die URLs in Ihrer index.html nicht um. Um dieses Problem zu beheben, haben Sie folgende Möglichkeiten:
Schreiben Sie index.html neu, um relative Links (
css/style.css
) statt absoluter (/css/style.css
) zu verwenden, sodass sie weiterhin von einer anderen URL-Basis aus funktionieren.Verwendenmod_proxy_htmlum die Links in Ihren ausgehenden HTML-, Javascript- und CSS-Inhalten neu zu schreiben. So etwas wie:
<Files *.html> ProxyHTMLEnable On ProxyHTMLLinks a href ... ProxyHTMLURLMap http://frontendserver/ http://frontendserver/webapp/ </Files>
Die erste Lösung ist am besten, wenn sie problemlos umsetzbar ist, da Ihre Inhalte dadurch portierbar und zuverlässiger sind.
Die zweite Lösung könnte für Sie funktionieren, wenn alle URLs in Ihrem Inhalt statisch sind. Aber mod_proxy_html weiß nichts über dynamisch berechnete URLs – zum Beispiel, wenn Sie URLs in Javascript berechnen. In diesem Fall wird es also fehlschlagen, es sei denn, Sie überarbeiten Ihren Code auch so, dass er eine dynamische URL-Basis verwendet.