GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Richtiger Umgang mit relativen URLs mit einem Reverse-Proxy

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
  1. Laden Sie das Modul mod_proxy_html

    LoadModule proxy_html_module modules/mod_proxy_html.so
    
  2. 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.


Linux
  1. So installieren Sie Odoo 11 auf CentOS 7 mit Nginx als Reverse Proxy

  2. So installieren Sie Odoo 10 auf CentOS 7 mit Nginx als Reverse Proxy

  3. So installieren Sie Flectra unter CentOS 8 mit Nginx als Reverse Proxy

  4. So installieren Sie Odoo 10 auf Ubuntu 16.04 mit Apache als Reverse-Proxy

  5. So installieren Sie Odoo 12 auf Ubuntu 18.04 mit Nginx als Reverse Proxy

So installieren Sie Varnish Reverse Proxy mit Nginx unter Ubuntu 16.04 LTS

Einfache HTTP-Authentifizierung mit Nginx

So installieren Sie GlassFish mit Nginx als Reverse Proxy unter Debian 10

So installieren Sie WildFly mit Nginx als Reverse Proxy unter Debian 10

So installieren Sie Flectra auf Ubuntu 20.04 mit Nginx als Reverse Proxy

So richten Sie Tomcat mit Nginx als Reverse Proxy unter Ubuntu 18.04 ein