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
-
Carica il modulo mod_proxy_html
LoadModule proxy_html_module modules/mod_proxy_html.so
-
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.