Lösung 1:
Der Apache ProxyPassRewrite schreibt die von http://test.example.com empfangenen Antworttexte nicht neu, sondern nur Header (wie Weiterleitungen auf eine 404-Seite und dergleichen).
Einige Alternativen:
Eins ) Schreiben Sie die interne App neu, um relative Pfade anstelle von absoluten zu verwenden. also ../css/style.css
statt /css/style.css
Zwei ) Stellen Sie die interne App erneut in demselben Unterverzeichnis /folder
bereit statt im Stammverzeichnis von test.example.com.
Drei ) Eins und zwei sind oft unwahrscheinlich ... Wenn Sie Glück haben, verwendet die interne App nur zwei oder drei Unterverzeichnisse und diese werden auf Ihrer Hauptseite nicht verwendet , schreiben Sie einfach ein paar ProxyPass-Zeilen:
# Expose Internal App to the internet.
ProxyPass /externalpath/ http://test.example.com/
ProxyPassReverse /externalpath/ http://test.example.com/
# Internal app uses a bunch of absolute paths.
ProxyPass /css/ http://test.example.com/css/
ProxyPassReverse /css/ http://test.example.com/css/
ProxyPass /icons/ http://test.example.com/icons/
ProxyPassReverse /icons/ http://test.example.com/icons/
Vier ) Erstellen Sie eine separate Subdomain für die interne App und vertauschen Sie einfach alles:
<VirtualHost *:80>
ServerName app.example.com/
# Expose Internal App to the internet.
ProxyPass / http://test.internal.example.com/
ProxyPassReverse / http://test.internal.example.com/
</VirtualHost>
Fünf ) Manchmal sind Entwickler völlig ahnungslos und lassen ihre Anwendungen nicht nur absolute URLs generieren, sondern sogar den Teil des Hostnamens in ihre URLs aufnehmen, und der resultierende HTML-Code sieht so aus:<img src=http://test.example.com/icons/logo.png>
.
A ) Sie können eine Kombinationslösung aus einem Split-Horizon-DNS und Szenario 4 verwenden. Sowohl interne als auch externe Benutzer verwenden test.example.com, aber Ihr internes DNS verweist direkt auf die IP-Adresse des Servers von test.example.com. Für externe Benutzer zeigt der öffentliche Eintrag 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 Anfragen an test.example.com weiterzuleiten, sondern auch den Antworttext umzuschreiben bevor sie an Ihre Benutzer übermittelt werden. (Normalerweise schreibt ein Proxy nur HTTP-Header/Antworten um). mod_substitute in Apache 2.2. Ich habe nicht getestet, ob es sich gut mit mod_proxy kombinieren lässt, aber vielleicht funktioniert Folgendes:
<Location /folder/>
ProxyPass http://test.example.com/
ProxyPassReverse http://test.example.com/
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s|test.example.com/|www.example.com/folder/|i"
</Location>
Lösung 2:
Als Ergänzung zu HBruijns Antwort, wenn Sie sich für Lösung (3) entscheiden "ProxyPass", möglicherweise müssen Sie auch mod_proxy_html verwenden, um einige URLs in Ihren HTML-Seiten umzuschreiben.
vgl. Wie man relative URLs mit einem Reverse-Proxy richtig handhabt für einige Beispiele.
Als Anwendungsbeispiel sehen Sie hier, wie Sie Apache mit ProxyHTMLURLMap
konfigurieren können Regel, alles an ihr-domain-name.com/pad weiterzuleiten zu Ihrer Etherpad-Instanz, die lokal auf Port 9001 läuft:
<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]
Lösung 3:
Sie können den folgenden Weg verwenden, um einen Reverse-Proxy zu erstellen:
1. Installieren Sie mod_proxy_html
yum install mod_proxy_html
-
Laden Sie das Modul mod_proxy_html
LoadModule proxy_html_module modules/mod_proxy_html.so
-
Und verwenden Sie folgende Einstellung
ProxyRequests off ProxyPass /folder/ http://test.madeupurl.com ProxyHTMLURLMap http://test.madeupurl.com /folder <Location /folder/> ProxyPassReverse / ProxyHTMLEnable On ProxyHTMLURLMap / /folder/ RequestHeader unset Accept-Encoding </Location>
Hoffe, das hilft.