Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Serveurs (Apache, IIS,...) > Apache
Apache Forum d'entraide Apache. Avant de poster : Cours Apache, FAQ Apache
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/01/2012, 14h10   #1
Membre actif
 
Inscription : mai 2005
Messages : 346
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 346
Points : 184
Points : 184
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 :
http://www.domaine_externe.com/service1
qu'il reçoive le contenu du serveur
Code :
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?
Sunsawe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 16h04   #2
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 299
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 299
Points : 8 583
Points : 8 583
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 :
1
2
ProxyPass /service1 http://service1.domaine_interne.com/
ProxyPassReverse /service1 http://service1.domaine_interne.com/
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 19h56   #3
Membre actif
 
Inscription : mai 2005
Messages : 346
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 346
Points : 184
Points : 184
Salut,

Merci pour ta réponse. J'ai regardé un peu autours et j'en suis arrivé à ça:
Code :
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 :
http://www.domaine_externe.com/service1
dans mon navigateur je reçois bien le contenu de
Code :
http://service1.domaine_interne.com/
.
Par contre, si je tape
Code :
http://www.domaine_externe.com/service1/annexe2
je suis redirigé vers
Code :
http://www.domaine_externe.com/annexe2
qui n'existe pas donc je reçois une erreur 404 au final.

Que manque t'il?
Sunsawe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 21h23   #4
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 299
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 299
Points : 8 583
Points : 8 583
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.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 12h18   #5
Membre actif
 
Inscription : mai 2005
Messages : 346
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 346
Points : 184
Points : 184
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 :
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 :
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 :
http://www.domaine_externe.com/service1/annexe2
je ne suis pas redirigé vers
Code :
http://www.domaine_externe.com/annexe2
mais vers
Code :
http://www.domaine_externe.com/annexe2/
à noter le dernier "/" au cas où ça aurait de l'importance.
Sunsawe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 22h48   #6
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 299
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 299
Points : 8 583
Points : 8 583
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.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2012, 20h18   #7
Membre actif
 
Inscription : mai 2005
Messages : 346
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 346
Points : 184
Points : 184
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 :
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>
Sunsawe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2012, 12h28   #8
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 299
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 299
Points : 8 583
Points : 8 583
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.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 16h01   #9
Membre actif
 
Inscription : mai 2005
Messages : 346
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 346
Points : 184
Points : 184
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?
Sunsawe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 21h37   #10
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 299
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 299
Points : 8 583
Points : 8 583
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.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 23h06   #11
Membre actif
 
Inscription : mai 2005
Messages : 346
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 346
Points : 184
Points : 184
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?
Sunsawe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 22h32   #12
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 299
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 299
Points : 8 583
Points : 8 583
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 :
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.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/01/2012, 09h18   #13
Membre actif
 
Inscription : mai 2005
Messages : 346
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 346
Points : 184
Points : 184
En effet, le bloc "location" a résolu mon probleme.
Merci bien.
Sunsawe est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h33.


 
 
 
 
Partenaires

Hébergement Web