GNU/Linux >> Linux Esercitazione >  >> Linux

Come gestire correttamente gli URL relativi con un proxy inverso

Soluzione 1:

Apache ProxyPassRewrite non riscrive i corpi della risposta ricevuti da http://test.example.com, solo le intestazioni (come i reindirizzamenti a una pagina 404 e simili).

Diverse alternative:

Uno ) Riscrivere l'app interna per utilizzare percorsi relativi anziché assoluti. cioè ../css/style.css invece di /css/style.css

Due ) Ridistribuire l'app interna nella stessa sottodirectory /folder anziché nella radice di test.example.com.

Tre ) Uno più due è spesso improbabile che accada... Se sei fortunato l'app interna utilizza solo due o tre sottodirectory e quelle sono inutilizzate sul tuo sito principale , scrivi semplicemente un mucchio di righe ProxyPass:

# 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/

Quattro ) Crea un sottodominio separato per l'app interna e inverti semplicemente tutto:

<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>

Cinque ) A volte gli sviluppatori sono completamente all'oscuro e le loro applicazioni non solo generano URL assoluti, ma includono anche la parte del nome host nei loro URL e il codice HTML risultante è simile a questo:<img src=http://test.example.com/icons/logo.png> .

A ) È possibile utilizzare la soluzione combinata di un DNS con orizzonte diviso e lo scenario 4. Sia gli utenti interni che quelli esterni utilizzano test.example.com, ma il DNS interno punta direttamente all'indirizzo IP del server di test.example.com. Per gli utenti esterni il record pubblico per test.example.com punta all'indirizzo IP del tuo server web pubblico www.example.com e puoi quindi utilizzare la soluzione 4.

B ) In realtà puoi fare in modo che Apache non solo inoltri le richieste a test.example.com, ma anche riscrivi il corpo della risposta prima che venga trasmesso ai tuoi utenti. (Normalmente un proxy riscrive solo intestazioni/risposte HTTP). mod_substitute in apache 2.2. Non ho verificato se si integra bene con mod_proxy, ma forse funziona quanto segue:

<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>

Soluzione 2:

A complemento della risposta di HBruijn, se opti per la soluzione (3) "ProxyPass", potresti dover utilizzare anche mod_proxy_html per riscrivere alcuni URL nelle tue pagine HTML.

cfr. Come gestire correttamente gli URL relativi con un proxy inverso per alcuni esempi.

Come esempio pratico, ecco come puoi configurare Apache usando il ProxyHTMLURLMap regola per inoltrare tutto a tuo-nome-dominio.com/pad alla tua istanza Etherpad in esecuzione localmente sulla porta 9001:

<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]

Soluzione 3:

È possibile utilizzare il seguente modo per creare un proxy inverso:
1. Installa mod_proxy_html

    yum install mod_proxy_html
  1. Carica il modulo mod_proxy_html

    LoadModule proxy_html_module modules/mod_proxy_html.so
    
  2. E usa la seguente impostazione

    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>  
    

Spero che questo aiuti.


Linux
  1. Come configurare un proxy inverso Nginx

  2. Come installare Odoo 11 su CentOS 7 con Nginx come proxy inverso

  3. Come installare Flectra su CentOS 8 con Nginx come proxy inverso

  4. Come installare Odoo 14 su CentOS 8 con Nginx come proxy inverso

  5. Come installare Odoo 11 su Ubuntu 16.04 con Nginx come proxy inverso

Come installare Varnish Reverse Proxy con Nginx su Ubuntu 16.04 LTS

Autenticazione HTTP di base con Nginx

Come installare GlassFish con Nginx come proxy inverso su Debian 10

Come installare WildFly con Nginx come proxy inverso su Debian 10

Come installare Odoo 12 su Ubuntu 18.04 con Nginx come proxy inverso

Come configurare Tomcat con Nginx come proxy inverso su Ubuntu 18.04