J'ai une configuration de proxy inverse comme suit dans Apache:
Le serveur A dont l'adresse www.example.com/folder est le serveur proxy inverse.
Il mappe vers: le serveur B avec l'adresse test.madeupurl.com
Ce genre de travaux. Mais le problème que j'ai est que, sur www.example.com/folder, tous les liens relatifs sont de la forme www.example.com/css/examplefilename.css plutôt que de www.example.com/folder/css/examplefilename. css
Comment puis-je réparer ça?
Jusqu'ici mon proxy inverse a ceci sur le serveur A (www.example.com):
<Location /folder>
ProxyPass http://test.madeupurl.com
ProxyPassReverse http://test.madeupurl.com
</Location>
linux
apache-2.2
reverse-proxy
Bosseur
la source
la source
Réponses:
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, etc.).
Un certain nombre d'alternatives:
Un ) Réécrire l'application interne pour utiliser des chemins relatifs au lieu de absolus. c'est
../css/style.css
à dire au lieu de/css/style.css
Deux ) Redéployez l'application interne dans le même sous-répertoire
/folder
plutôt que dans la racine de test.example.com.Trois ) Un et deux sont souvent improbables… Si vous avez de la chance, l'application interne utilise uniquement deux ou trois sous - répertoires et ceux qui ne sont pas utilisés sur votre site principal , écrivez simplement un tas de lignes ProxyPass:
Quatre ) Créez un sous-domaine distinct pour l'application interne et inversez simplement le proxy:
Cinq ) Parfois , les développeurs
sont complètement désemparés etleurs applications génèrent non seulement URL absolue de même , mais comprennent la partie de nom d' hôte dans leur apparence et de le code HTML résultant URL comme ceci:<img src=http://test.example.com/icons/logo.png>
.A ) Vous pouvez utiliser la solution combinée d'un DNS fractionné Horizon et du scénario 4. Les utilisateurs internes et externes utilisent le test.example.com, mais votre DNS interne pointe directement sur l'adresse IP du serveur de test.example.com. Pour les utilisateurs externes, l'enregistrement public de test.example.com pointe sur l'adresse IP de votre serveur Web public www.example.com. Vous pourrez ensuite utiliser la solution 4.
B ) Vous pouvez réellement obtenir Apache pour non seulement des demandes de proxy à test.example.com, mais également pour réécrire le corps de la réponse avant qu'elle ne soit transmise à vos utilisateurs. (Normalement, un proxy ne réécrit que les en-têtes / réponses HTTP). mod_substitute in apache 2.2. Je n'ai pas testé si cela fonctionne bien avec mod_proxy, mais peut-être que ça marche:
la source
<img src=/folder/icons/button.png>
qui tour sera capturé par laProxyPass /folder/ http://test.madeupurl.com/folder/
directive.href="../css/custom.css"
et nonhref="/css/custom.css"
. Lorsque l'internaute récupère la page, l'URL est www.example.com/folder/content/index.html. L'URL pour le css sera alors:www.example.com/folder/content/../css/custom.css
qui est en fait celuiwww.example.com/folder/css/custom.css
qui sera transféré àtest.madeupurl.com/css/custom.css
.En complément de la réponse de HBruijn , si vous optez pour "ProxyPass" de solution (3) , 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 avec un proxy inverse pour certains exemples.
À titre d'exemple, voici comment vous pouvez configurer Apache en utilisant la
ProxyHTMLURLMap
règle pour tout transférer sur votre-nom-de-domaine.com/pad vers 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]
la source
SetOutputFilter
&ProxyHTMLURLMap
.Vous pouvez utiliser la méthode suivante pour créer un proxy inverse:
1. Installez mod_proxy_html.
Charger le module mod_proxy_html
Et utiliser le réglage suivant
J'espère que cette aide.
la source