Solution 1 :
Apache ProxyPassRewrite ne réécrit pas les corps de réponse reçus de http://test.example.com, uniquement les en-têtes (comme les redirections vers une page 404 et autres).
Plusieurs alternatives :
Un ) Réécrivez l'application interne pour utiliser des chemins relatifs au lieu d'absolus. c'est-à-dire ../css/style.css
au lieu de /css/style.css
Deux ) Redéployez l'application interne dans un même sous-répertoire /folder
plutôt qu'à la racine de test.example.com.
Trois ) Un et deux sont souvent peu susceptibles de se produire... Si vous avez de la chance, l'application interne n'utilise que deux ou trois sous-répertoires et ceux-ci ne sont pas utilisés sur votre site principal , écrivez simplement un tas de lignes 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/
Quatre ) Créez un sous-domaine distinct pour l'application interne et renversez simplement tout :
<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>
Cinq ) Parfois, les développeurs sont complètement désemparés et que leurs applications génèrent non seulement des URL absolues, mais incluent même la partie nom d'hôte dans leurs URL et le code HTML résultant ressemble à ceci :<img src=http://test.example.com/icons/logo.png>
.
A ) Vous pouvez utiliser la solution combinée d'un DNS à horizon partagé et du scénario 4. Les utilisateurs internes et externes utilisent test.example.com, mais votre DNS interne pointe directement vers l'adresse IP du serveur de test.example.com. Pour les utilisateurs externes, l'enregistrement public de test.example.com pointe vers l'adresse IP de votre serveur Web public www.example.com et vous pouvez alors utiliser la solution 4.
B ) Vous pouvez en fait demander à apache non seulement de faire des requêtes proxy à test.example.com, mais aussi de réécrire le corps de la réponse avant qu'il ne soit transmis à vos utilisateurs. (Normalement, un proxy ne réécrit que les en-têtes/réponses HTTP). mod_substitute dans apache 2.2. Je n'ai pas testé s'il s'empile bien avec mod_proxy, mais peut-être que ce qui suit fonctionne :
<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>
Solution 2 :
En complément de la réponse de HBruijn, si vous optez pour la solution (3) "ProxyPass", vous devrez peut-être également utiliser mod_proxy_html pour réécrire certaines URL dans vos pages HTML.
cf. Comment gérer correctement les URL relatives avec un proxy inverse pour quelques exemples.
Comme exemple appliqué, voici comment vous pouvez configurer Apache en utilisant le ProxyHTMLURLMap
règle pour tout transférer sur votre-nom-de-domaine.com/pad à votre instance Etherpad s'exécutant localement sur le port 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]
Solution 3 :
Vous pouvez utiliser la méthode suivante pour créer un proxy inverse :
1. Installez mod_proxy_html
yum install mod_proxy_html
-
Charger le module mod_proxy_html
LoadModule proxy_html_module modules/mod_proxy_html.so
-
Et utilisez le paramètre suivant
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>
J'espère que cette aide.