web-dev-qa-db-fra.com

ProxyPassReverse ne me garde pas sur l'URL du proxy lorsque je clique dessus

J'ai l'hôte virtuel suivant sur mon serveur Web personnel qui s'exécute sur mon NAS. J'ai la configuration dynDNS pour rediriger les deux répertoires suivants: mydomain.com et * .mydomain.com vers mon NAS.

<VirtualHost *:80>
    ServerName redir.example.com
    ProxyPass /pbay/ http://www.anothersite.example.com/
    ProxyPassReverse /pbay/ http://www.anothersite.example.com/
</VirtualHost>

lorsque j'essaie de visiter redir.example.com/pbay/, il redirige vers www.anothersite.example.com/ et la barre d'adresse affiche toujours redir.example.com/pbay/ comme prévu. Mais lorsque je fais quelque chose sur le site qui entraîne une autre demande au serveur, la barre d'adresse change pour une adresse réelle (anothersite.example.com). Je veux toujours montrer que http://redir.example.com/.

Je pensais que c’était le but de ProxyPassReverse. Comment puis-je atteindre cet objectif?

4
Ram Gogada

Vous devez également activer mod_proxy_html . ProxyPassReverse ne réécrit que les en-têtes HTTP. Pour réécrire le contenu du code HTML (tel que des liens absolus), vous devez activer le module supplémentaire.

La documentation de ProxyPassReverse le dit très clairement:

Cette directive permet à Apache httpd d'ajuster l'URL dans les en-têtes Location, Content-Location et URI sur les réponses de redirection HTTP. Cela est essentiel lorsque Apache httpd est utilisé en tant que proxy inverse (ou passerelle) pour éviter de contourner le proxy inverse en raison des redirections HTTP sur les serveurs principaux qui restent derrière le proxy inverse.

Seuls les en-têtes de réponse HTTP spécifiquement mentionnés ci-dessus seront réécrits. Apache httpd ne réécrira pas les autres en-têtes de réponse, pas plus qu'il ne réécrira par défaut les références URL dans les pages HTML. Cela signifie que si le contenu mandaté contient des références URL absolues, ils contourneront le proxy. Pour réécrire le contenu HTML afin qu'il corresponde au proxy, vous devez charger et activer mod_proxy_html .

1