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 :

Comment servir les pages d'un autre serveur d'après les paramètres ?


Sujet :

Apache

  1. #1
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut Comment servir les pages d'un autre serveur d'après les paramètres ?
    Salut,

    Excusez moi pour le titre un peu bizarre, mais j'ai vraiment du mal à exprimer le problème en une phrase.
    En pratique, on a divers services fournis par divers serveurs Apache.
    On voudrait rendre certains accessible à l'Internet.

    On dispose d'un serveur qui est accessible depuis l'Internet. On voudrait donc que ce serveur serve les pages de certains autres, de manière transparente (comme un proxy).

    Le truc, c'est qu'on ne peut pas disposer de sous domaines.
    La question est donc... est ce possible?

    Schématiquement, on veut que si Jean tape
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://www.domaine_externe.com/service1
    qu'il reçoive le contenu du serveur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://service1.domaine_interne.com/
    sans pour autant qu'il soit redirigé vers un autre serveur (forcément, ça ne fonctionnerait pas).
    Est ce possible et comment?

  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
    Points : 12 977
    Points
    12 977
    Par défaut
    Oui c'est possible et tu as donné toi-même la solution : configurer un proxy. Pour être précis, c'est un reverse proxy mais c'est du détail. Il faut tout simplement utiliser mod_proxy. C'est très simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ProxyPass /service1 http://service1.domaine_interne.com/
    ProxyPassReverse /service1 http://service1.domaine_interne.com/

  3. #3
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut
    Salut,

    Merci pour ta réponse. J'ai regardé un peu autours et j'en suis arrivé à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <VirtualHost *:*>
     ProxyPreserveHost On
     ProxyPass /service1 http://service1.domaine_interne.com/
     ProxyPassReverse /service1 http://service1.domaine_interne.com/
     </VirtualHost>
    Du coup, si je tape
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://www.domaine_externe.com/service1
    dans mon navigateur je reçois bien le contenu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://service1.domaine_interne.com/
    .
    Par contre, si je tape
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://www.domaine_externe.com/service1/annexe2
    je suis redirigé vers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://www.domaine_externe.com/annexe2
    qui n'existe pas donc je reçois une erreur 404 au final.

    Que manque t'il?

  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
    Points : 12 977
    Points
    12 977
    Par défaut
    A confirmer en regardant les logs d'accès du service service1.domaine_interne.com mais je dirais que c'est service1.domaine_interne.com qui fait la redirection.

  5. #5
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut
    J'ai vérifié et en fait non.
    Le service1.domaine_interne.com ne reçoit pas la requete.
    En fait c'est à cause du dernier "/".
    Si j'en ajoute un à la fin, comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://www.domaine_externe.com/service1/annexe2/
    Tout fonctionne correctement.
    Sinon, le serveur service1 ne reçoit pas la requete et le "access log" du serveur proxy affiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IP -  - DATE "GET /annexe2/ HTTP/1.1" 404 207 ...
    le "service1" a disparu entre temps.

    J'ai remarqué avoir fait une erreur précédemment en rapportant l'erreur. En tapant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://www.domaine_externe.com/service1/annexe2
    je ne suis pas redirigé vers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://www.domaine_externe.com/annexe2
    mais vers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://www.domaine_externe.com/annexe2/
    à noter le dernier "/" au cas où ça aurait de l'importance.

  6. #6
    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
    Points : 12 977
    Points
    12 977
    Par défaut
    Regarde le code HTML des pages reçues par ton navigateur. Il se peut que ce soit <a href="/annexe2"> (ou /annexe2/, peu importe). Dans ce cas, c'est difficile de lutter car il faut soit modifier l'application de service1 pour qu'il modifie le code HTML et ne plus renvoyer de href="/..., soit utiliser un module du style mod_proxy_html pour réécrire en live le code HTML renvoyé au navigateur et renvoyer le bon code HTML.

  7. #7
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut
    Salut,
    J'ai suivi ton conseil et j'ai installe et configure mod_proxy_html.
    J'ai reussi a obtenir le resultat desire. tous les liens sont transformes comme il faut.
    Par contre, les sessions semblent ne pas tenir.

    En pratique, l'un des services qu'on voudrait rendre disponible necessite de se logger. on peut soumettre les identifiants et on recoit la page de confirmation. Mais des qu'on clique sur un autre lien, le systeme renvoit la page d'identification.

    Comment faire pour que la session soit maintenu entre le client et le serveur final au travers du proxy?

    voici ma configuration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <VirtualHost *:*>
     ProxyPreserveHost On
     ProxyHTMLEnable On 
     ProxyHTMLLogVerbose On
     LogLevel Info
     ProxyRequests off
     ProxyPass /service1/ http://service1.domaine_interne.com/
     ProxyPassReverse /service1/ http://service1.domaine_interne.com/
     ProxyHTMLURLMap http://service1.domaine_interne.com /service1
     ProxyHTMLURLMap / /service1
     </VirtualHost>

  8. #8
    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
    Points : 12 977
    Points
    12 977
    Par défaut
    Aucune idée. Apparemment c'est un problème de domaine/chemin de cookie. Il faut voir quel domaine est renvoyé avec le cookie et voir si c'est un domaine compatible avec les URL de ton reverse proxy. Il y aura peut-être du paramétrage de cookie à faire côté service, vois si c'est possible.

  9. #9
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut
    Finallement, j'ai resolu le probleme en utilisant ProxyPassReverseCookieDomain et ProxyPassReverseCookiePath.

    Par contre maintenant... comment faire pour le service2?

    Dois je dupliquer le vhost? mais alors comment distinger les deux puisque le discriminant n'est ni le nom de serveur, ni l'adresse IP?

  10. #10
    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
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par Sunsawe Voir le message
    mais alors comment distinger les deux puisque le discriminant n'est ni le nom de serveur, ni l'adresse IP?
    A quoi sert le premier paramètre de ProxyPass, à ton avis ? Il suffit de copier les lignes ProxyPass et ProxyPassReverse et de mettre un chemin différent du précédent. Le seul truc c'est le ProxyHTMLURLMap / /service1 qui risque de poser problème.

  11. #11
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut
    c'est justement pour ca que je pose la question.
    il est evident que toutes les autres lignes contiennent suffisament d'information pour s'exclure mutuellement.
    mais ce n'est pas le cas pour ProxyHTMLURLMap et cette directive est necessaire.

    Donc la question est, comment isoler les configurations de chaque service?

  12. #12
    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
    Points : 12 977
    Points
    12 977
    Par défaut
    Je ne connais mod_proxy_html que de nom, alors je ne sais pas à quoi sert ProxyHTMLURLMap. Ceci dit, je pense que ce sont des blocs <Location> que tu veux construire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <VirtualHost *:*>
     <Location /service1>
      ProxyPreserveHost On
      ProxyHTMLEnable On 
      ProxyHTMLLogVerbose On
      LogLevel Info
      ProxyRequests off
      ProxyPass http://service1.domaine_interne.com/
      ProxyPassReverse http://service1.domaine_interne.com/
      ProxyHTMLURLMap http://service1.domaine_interne.com /service1
      ProxyHTMLURLMap / /service1
     </Location>
     
     <Location /service2>
      ProxyPreserveHost On
      ProxyHTMLEnable On 
      ProxyHTMLLogVerbose On
      LogLevel Info
      ProxyRequests off
      ProxyPass http://service2.domaine_interne.com/
      ProxyPassReverse http://service2.domaine_interne.com/
      ProxyHTMLURLMap http://service2.domaine_interne.com /service2
      ProxyHTMLURLMap / /service2
     </Location>
    </VirtualHost>
    Je ne suis pas du tout sûr que ça marchera. Tu remarqueras que dans un <Location> les directives ProxyPass et ProxyPassReverse n'ont plus qu'un seul argument.

  13. #13
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut
    En effet, le bloc "location" a résolu mon probleme.
    Merci bien.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/02/2007, 19h09
  2. [AJAX] probleme appelle page XML sur autre serveur
    Par ldcarpathes dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 14/08/2006, 18h35
  3. visualiser les pages asp sur le serveur ASP
    Par toussa dans le forum IIS
    Réponses: 1
    Dernier message: 27/05/2006, 20h32
  4. Comment envoyer mes pages HTML pour le serveur?
    Par Paulinho dans le forum Autres langages pour le Web
    Réponses: 6
    Dernier message: 04/04/2006, 14h03
  5. [FLASH MX2004] loadVar vers une page d'un autre serveur
    Par j0hnmerrick dans le forum Flash
    Réponses: 3
    Dernier message: 22/03/2005, 12h49

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