9 votes

Comment puis-je rediriger des URL à l'aide du module proxy d'Apache ?

Cela semble être une question très basique, mais j'ai du mal à trouver une solution simple. J'apprécie donc toute aide et patience à mon égard :

Je veux configurer mon serveur proxy Apache pour qu'il redirige certaines URL de sorte que, par exemple, une requête HTTP du navigateur Web pour www.olddomain.com soit transmise au serveur proxy qui achemine ensuite la requête vers www.newdomain.com qui envoie une réponse au serveur proxy qui la renvoie ensuite au navigateur Web.

Cela semble si simple, mais je ne vois pas comment y parvenir avec Apache. Je sais que Squid/Squirm offrent cette fonctionnalité, donc je suppose que je manque quelque chose de vraiment basique. Je sais que je peux utiliser RewriteRule pour modifier dynamiquement l'URL et la transmettre au serveur proxy, mais je veux en fait faire l'inverse, c'est-à-dire que le serveur proxy reçoive l'URL d'origine, applique la RewriteRule, puis transmette la requête HTTP à la nouvelle URL.

J'espère que cela a du sens. Merci d'avance pour toute aide.

7voto

basvdlei Points 1256

D'après votre commentaire sur ma réponse précédente, j'en déduis que vous utilisez Apache comme proxy de redirection ( ProxyRequests On ). Vous pouvez utiliser mod_rewrite pour passer par des URL spécifiques.

Vous avez probablement quelque chose comme ça dans votre configuration Apache :

ProxyRequests On
ProxyVia On
<Proxy *>
   Order deny,allow
   Allow from xx.xx.xx.xx
</Proxy>

Ensuite, vous devez ajouter ce qui suit afin de passer par proxy toutes les demandes provenant de www.olddomain.com/foo à www.newdomain.com/bar :

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.olddomain\.com$
RewriteRule /foo(.*)$ http://www.newdomain.com/bar/$1 [P,L]

Ce que cela fait :

  • Quand une demande est faite à l'hôte www.olddomain.com El RewriteRule fera feu.
  • Cette règle remplace /foo à http://www.newdomain.com/bar/ .
  • La substitution est transmise à mod_proxy ( P ).
  • Arrêtez de réécrire ( L ).

Exemple de résultat :

  • Le navigateur est configuré pour utiliser votre Apache comme serveur proxy.
  • Elle demande www.olddomain.com/foo/test.html .
  • Votre Apache va réécrire ceci en www.newdomain.com/bar/test.html .
  • Il demandera cette page au serveur web responsable.
  • Renvoyer le résultat au navigateur en tant que www.olddomain.com/foo/test.html .

2voto

basvdlei Points 1256

Si je vous comprends bien, vous voudrez probablement regarder : mod_proxy en combinaison avec des hôtes virtuels basés sur le nom

Voici un petit exemple de ce à quoi cela pourrait ressembler. Toutes les requêtes provenant de l'hôte virtuel www.olddomain.com seront demandées à www.newdomain.com et réécrites par apache :

NameVirtualHost *:80
<VirtualHost *:80>
     ServerName www.olddomain.com

     <Proxy *>
            Order deny,allow
            Allow from all
     </Proxy>
     ProxyPass / http://www.newdomain.com/
     ProxyPassReverse / http://www.newdomain.com/
     ProxyPassReverseCookieDomain www.newdomain.com www.olddomain.com 
</VirtualHost>

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X