Forum général.général Apache, Reverse Proxy et URL absolue

Posté par  .
Étiquettes : aucune
0
24
juin
2009
Bonjour,

Je souhaite mettre en place un reverse proxy à l'aide d'apache. J'ai en fait des serveurs web qui ne peuvent être vu de l'extérieur alors que le serveur apache lui est vu. Je veux donc passer par celui-ci qui se chargera d'effectuer les requêtes sur les serveurs "invisibles".


(extérieur)
|
apache
|
---------------
| |
serveur_1 serveur_2


Voici alors la configuration résultante.


NameVirtualHost *:80
[VirtualHost *:80]
ProxyRequests Off
[Proxy *]
Order deny,allow
Allow from all
[/Proxy]
[Location /site1/]
ProxyPass http://serveur_1/
ProxyPassReverse http://serveur_1/
[/Location]
[Location /site2/]
ProxyPass http://serveur_2/
ProxyPassReverse http://serveur_2/
[/Location]
[/VirtualHost]


Ainsi, si http://apache/ est l'URL de mon serveur apache, pour atteindre le serveur 1, je tape http://apache/site1/ et je me retrouve sur celui-ci.

Cependant s'il y à une URL absolue dans la page par exemple pour une image :
src="/img/mon_image.png"
L'URL résultante est http://apache/img/mon_image.png du coup elle n'est pas affiché car effectivement l'image n'est pas sur le serveur apache mais sur le serveur 1.

La bonne URL serait alors http://apache/site1/img/mon_image.png et c'est ce que je n'arrive pas à obtenir.

J'ai alors essayer de passer par le module "rewrite" afin de modifier les URL absolues "/" en "/site1/". Mais je dois m'y prendre mal car je n'arrive pas au résultat escompté.

Avez-vous une idée qui pourrait me faire avancer ?
  • # URL relatives

    Posté par  . Évalué à 2.

    Il vaut mieux utiliser des URLs relatives dans tes pages, ça évitera les problèmes.

    Car tu peux éventuellement réécrire pour le premier serveur, mais alors le deuxième ne passera pas, à moins que dans ta réécriture d'URL tu ne tienne compte du referer, mais ce ne sera pas très robuste (le referer est un header optionnel).
    • [^] # Re: URL relatives

      Posté par  . Évalué à 1.

      Oui cela serait simple (enfin tout dépendrait des dites pages) mais je n'ai pas la possibilité de modifier les pages des autres serveurs. Le seul que je "contrôle" c'est le serveur Apache.
      • [^] # Re: URL relatives

        Posté par  . Évalué à 2.

        Alors tu devrais plutôt essayer d'avoir des noms de domaines différents de l'extérieurs pour tes différents serverus internes.
        Par exemple 1.apache qui renverrait vers serveur_1 et 2.apache qui renverrait vers serveur_2 (avec des VirtualHost différents)

        Tu peux aussi faire des virtual host sur des ports différents, mais ça risque de ne pas être très partique d'être sur des ports non standards.
  • # mod_proxy_html + mod_substitute

    Posté par  (site web personnel) . Évalué à 4.

    Bonjour,

    J'ai eu un problème similaire.

    En fait, lorsque l'on fait un ReverseProxy avec Apache, les URLs dans les headers sont bien transformées mais pas le code HTML, Javascript, CSS,...

    J'ai eu un problème similaire avec le logiciel libre eXo Platform qui veut absolument répondre sur un context-root déterminé.

    Pour cela, j'ai utilisé mod_proxy_html pour réécrire le lien HTML à la volé et mod_substitute pour certians cas particuliers.

    Voici un lien sur mod_proxy_html (http://apache.webthing.com/mod_proxy_html ) sur lequel tu trouveras un tutoriel expliquant la problématique : http://www.apachetutor.org/admin/reverseproxies.

    Cordialement

    Xavier
  • # Squid

    Posté par  . Évalué à 2.

    Pour avoir testé la solution apache en tant que reverse proxy, je te conseille milles fois quelque chose comme squid si tu en a la possibilité.

    C'est beaucoup plus performant dans la gestion des caches (quand le serveur est en adsl, ça compte beaucoup), et plus simple aussi.

    Des petits problèmes comme ça, tu en as pas. Bon, t'en a d'autres, mais c'est quand même mieux.

    Envoyé depuis mon lapin.

    • [^] # Re: Squid

      Posté par  (site web personnel) . Évalué à 1.

      Personnellement j'ai tenté d'utiliser Squid pour en faire un reverse proxy HTTP comme on le fait avec Apache mais je n'ai pas réussi à faire la même chose.

      Je trouve que Squid est moins bien documenté qu'Apache HTTPD et les exemples sur Internet sont moins nombreux.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.