IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apache Discussion :

Proxy Pass et/ou URL rewriting, ou autre ?


Sujet :

Apache

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 24
    Par défaut Proxy Pass et/ou URL rewriting, ou autre ?
    Bonjour,

    cela fait 2 jours entiers que je cherche la solution à mon problème, sans succès! voici mon souci :

    J'ai un reverse proxy apache (2.2.3) en DMZ qui me sert pour rediriger tous mes flux http/https entrants.
    J'ai plusieurs DNS type aaa.domaine.fr, bbb.domaine.fr qui redirige vers ce reverse proxy, et selon le sous domaine (ServerName, ServerAlias), le flux correspondant est traité avec un virtualhost dédié à chaque sous domaine.

    Jusque là, aucun pbm, c'est du "classique" mais je bloque sur un détail :
    je désiré redirigé bbb.domaine.fr vers un serveur interne, et j'utilise pour cela soit:
    - ProxyPass et ProxyPassReverse
    - une réécriture d'url
    Dans les deux cas j'arrive à faire ce que je veux mais je désire cacher une partie de l'URL (répertoire), et au final, je n'y arrive jamais.

    Voici mes 2 confs qui fonctionnent bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ProxyPass /dossier/ http://interne/dossier/
    ProxyPassReverse /dossier/ http://interne/dossier/
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^/(.*)     http://interne/dossier/$1 [P]
    J'ai trouvé pas mal de topic (dont bcp sur ce forum) très proche mais jamais dans ce "sens" : je veux que http://bbb.domaine.fr/ affiche le site se trouvant sur http://interne/dossier/, mais en cachant le "dossier" dans l'URL final de l'utilisateur.
    Donc en gros que le "/" affiche le site de "/dossier", donc en réécrivant l'URL "/dossier/" en "/" et vice versa.

    j'ai vu souvent le problème à l'envers, c'est à dire que les personnes voulait faire du reverse proxy de http://bbb.domaine.fr/dossier/ vers http://interne/, du coup je n'ai pas trouvé la solution à mon problème.

    J'ai vu que quand on utilisait de l'url rewriting avec la balise [P], en fait cela termine la réécriture (comme [L]), et qu'on ne peut donc pas remettre de règle après (j'ai essayé d'ailleurs, et ça ne prend pas en compte).
    Et même avec une règle avant, comme le "/" redirige vers "/dossier" en interne, l'URL garde ce "/dossier/".

    Avec la conf "ProxyPass et ProxyPassReverse", je viens de tester aussi l'utilisation de "ProxyHTMLURLMap" mais je ne comprends vraiment pas comment l'utiliser (oui j'ai regardé la doc apache).

    Voici des exemples de conf test qui n'ont rien donné:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ProxyHTMLEnable On
    ProxyPass /  http://interne/dossier/
    ProxyHTMLURLMap  http://interne/dossier/ /
        <Location />
            ProxyPassReverse  http://interne/dossier/
            SetOutputFilter proxy-html
            ProxyHTMLURLMap /dossier/ /
            ProxyHTMLURLMap / /
            SetOutputFilter INFLATE
        </Location>
    En fait, ça marche au tiers: le reverse proxy fonctionne mais je n'ai pas les images ni css du site, et ça ne cache pas le "/dossier" dans l'URL finale.

    Autre config que j'ai testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ProxyPass / http://interne/dossier/
    ProxyPassReverse / http://interne/dossier
    Mais là encore, je n'ai ni les images/css, ni le "/dossier" caché dans l'URL.

    Donc, comme je disais, j'arrive à faire fonctionner mon reverse proxy par les deux manières, donc au pire, ça marchera.
    Mais ce petit détail de ne pas pouvoir cacher le "/dossier/" dans l'URL me chagrine!

    Une âme charitable pourrait-elle m'aider?
    Merci pour votre aide!

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Citation Envoyé par Albator84 Voir le message
    En fait, ça marche au tiers: le reverse proxy fonctionne mais je n'ai pas les images ni css du site, et ça ne cache pas le "/dossier" dans l'URL finale.
    Sauf que c'est la bonne façon de faire. Là, tu as juste un problème avec le code HTML de tes pages : les liens sont en /dossier/xxx/yyy.jpg au lieu d'être xxx/yyy.jpg. mod_proxy_html est la bonne chose à utiliser si tu ne peux pas corriger le code HTML du site.

    Tu peux donner un fragment du code HTML renvoyé par ton vrai serveur sans passer par le reverse proxy (= le code HTML reçu par le reverse proxy) ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 24
    Par défaut
    hello,

    oui effectivement, le serveur (le vrai) renvoie ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <head>
    <title>mon titre</title>
    <link href="/dossier/DOM/css/identification.css" media="all" rel="stylesheet" type="text/css" />
    <link href="/dossier/DOM/css/style_general.css" media="all" rel="stylesheet" type="text/css" />
    ...
    </head>
      <body>
        <div id="page">
          <div id="bandeau">
           <img id="logo" src="/dossier/DOM/images/logo.png" alt="logo" />
    ...
    et donc oui, malheureusement c'est codé comme ça "en dur" (ce n'est pas moi qui est codé cette horreur... je dois faire avec, snifff...)

    j'avais bien vu ce point, mais je suis incapable de savoir comment fonctionne mod_proxy_html pour faire ce que je veux ! :-(

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Je n'ai jamais utilisé ce module, mais je vais quand même essayer de t'aider.

    C'est quelle version de mod_proxy_html ? Quel est l'encodage de tes pages ? Tu as déjà essayé avec cette version "simplifiée" de ta configuration ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        ProxyHTMLEnable On
        ProxyPass /  http://interne/dossier/
        ProxyHTMLURLMap  http://interne/dossier/ /
        <Location />
            ProxyPassReverse  http://interne/dossier/
            SetOutputFilter proxy-html
            ProxyHTMLURLMap /dossier/ /
        </Location>

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 24
    Par défaut
    version d'Apache : 2.2.3
    la version de libxml2 : 2.6.26-2.1.2.8
    version de mod_proxy_html : ?
    je n'ai pas réussi à trouver la version car j'ai dû supprimé le fichier mod_proxy_html.c que l'on compile avec apxs, libxml2 et mod_xml2enc, et qui donne au final le module mod_proxy_html.so.
    Du coup, je ne peux te répondre.

    L'encodage serveur sur le reverse proxy est de l'UTF8, et sur le serveur final, c'est de l'ISO-8859-1. Les pages web sont encodées avec ça.

    Je viens d'essayer ta configuration, mais c'est quasi celle que j'ai mise dans mon 1er post, sauf que je dois absolument rajouter le "SetOutputFilter INFLATE" pour que j'affiche la page, sinon j'ai une erreur de compression.

    Par contre, avec cette config, ça ne cache pas le "/dossier/", et je n'ai pas les images non plus (ni css, etc...). mais c'est le problème de coder avec des url en absolu... c'est n'importe quoi!

    je vais creuser de mon côté sur ça mais j'arrive pas à piger le concept... "go to the doc!

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/11/2008, 10h38
  2. Réponses: 7
    Dernier message: 19/03/2008, 16h07
  3. Réponses: 4
    Dernier message: 28/01/2008, 17h55
  4. Réponses: 6
    Dernier message: 15/02/2006, 13h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo