Ich habe ein Reverse-Proxy-Setup wie folgt in Apache:
Server A mit der Adresse www.example.com/folder ist der Reverse-Proxy-Server.
Es ordnet zu: Server B mit der Adresse test.madeupurl.com
Diese Art von Arbeiten. Aber das Problem, das ich habe, ist, dass auf www.example.com/folder alle relativen Links die Form www.example.com/css/examplefilename.css haben und nicht www.example.com/folder/css/examplefilename. CSS
Wie behebe ich das?
Bisher hat mein Reverse Proxy dies auf Server A (www.example.com):
<Location /folder>
ProxyPass http://test.madeupurl.com
ProxyPassReverse http://test.madeupurl.com
</Location>
linux
apache-2.2
reverse-proxy
Fleißiger Arbeiter
quelle
quelle
Antworten:
Apache ProxyPassRewrite schreibt die von http://test.example.com empfangenen Antworttextkörper nicht um, sondern nur die Header (wie Weiterleitungen zu einer 404-Seite usw. ).
Eine Reihe von Alternativen:
Erstens : Schreiben Sie die interne App neu, um relative Pfade anstelle von absoluten Pfaden zu verwenden. dh
../css/style.css
statt/css/style.css
Zwei ) Stellen Sie die interne App erneut in demselben Unterverzeichnis
/folder
und nicht im Stammverzeichnis von test.example.com bereit.Drei ) Eins und zwei sind oft unwahrscheinlich ... Wenn Sie Glück haben, dass die interne App nur zwei oder drei Unterverzeichnisse verwendet und diese auf Ihrer Hauptseite nicht verwendet werden , schreiben Sie einfach ein paar ProxyPass-Zeilen:
Vier ) Erstellen Sie eine separate Subdomain für die interne App und kehren Sie einfach den Proxy um:
Fünf ) Manchmal Entwickler
sind völlig ahnungslos undhaben ihre Anwendungen nicht nur absolute URLs erzeugen , sondern auch den Hostnamen an ihre URLs enthalten und die resultierende HTML - Code sieht wie folgt aus :<img src=http://test.example.com/icons/logo.png>
.A ) Sie können eine kombinierte Lösung aus einem Split-Horizon-DNS und Szenario 4 verwenden. Sowohl interne als auch externe Benutzer verwenden test.example.com, aber Ihr interner DNS verweist direkt auf die IP-Adresse des Servers von test.example.com. Für externe Benutzer verweist der öffentliche Datensatz für test.example.com auf die IP-Adresse Ihres öffentlichen Webservers www.example.com, und Sie können dann Lösung 4 verwenden.
B ) Sie können Apache dazu bringen, nicht nur Proxy-Anforderungen an test.example.com zu senden, sondern auch den Antworttext neu zu schreiben, bevor er an Ihre Benutzer übertragen wird. (Normalerweise schreibt ein Proxy nur HTTP-Header / -Antworten um). mod_substitute in apache 2.2. Ich habe nicht getestet, ob es mit mod_proxy gut stapelt, aber vielleicht funktioniert Folgendes:
quelle
<img src=/folder/icons/button.png>
in wiederum wird von derProxyPass /folder/ http://test.madeupurl.com/folder/
Richtlinie erfasst.href="../css/custom.css"
und nichthref="/css/custom.css"
. Wenn der Internetbenutzer die Seite abruft, lautet die URL www.example.com/folder/content/index.html. Die URL für das CSSwww.example.com/folder/content/../css/custom.css
lautet dann: welches ist eigentlichwww.example.com/folder/css/custom.css
welches wird weitergeleitettest.madeupurl.com/css/custom.css
.Wenn Sie sich als Ergänzung zu HBruijns Antwort für Lösung (3) "ProxyPass" entscheiden, müssen Sie möglicherweise auch mod_proxy_html verwenden , um einige URLs in Ihren HTML-Seiten neu zu schreiben.
vgl. Wie man relative URLs mit einem Reverse-Proxy für einige Beispiele richtig behandelt .
Im Folgenden finden Sie ein Beispiel, wie Sie Apache mithilfe der
ProxyHTMLURLMap
Regel so konfigurieren können , dass alles, was Sie unter your-domain-name.com/pad angegeben haben, an Ihre Etherpad- Instanz weitergeleitet wird, die lokal auf Port 9001 ausgeführt wird:<Location /pad> ProxyPass http://localhost:9001 retry=0 # retry=0 => avoid 503's when restarting etherpad-lite ProxyPassReverse http://localhost:9001 SetOutputFilter proxy-html ProxyHTMLURLMap http://localhost:9001 </Location> RewriteRule ^/pad$ /pad/ [R]
quelle
SetOutputFilter
&ProxyHTMLURLMap
.Sie können einen Reverse-Proxy folgendermaßen
erstellen : 1. Installieren Sie mod_proxy_html
Laden Sie das Modul mod_proxy_html
Und verwenden Sie die folgenden Einstellungen
Ich hoffe das hilft.
quelle