Bonjour,
J'ai un problème de différence de comportement d'Apache entre différents environnements pour un fichier de configuration équivalent.
En fait j'ai une règle de rewriting avec les flags [L,P] et dont l'URL de substitution est une URL vers ce même serveur apache.
Lorsque le serveur est ré-attaquée à la suite de la ré-écriture :
- Dans l'environnement 1, on ne repasse pas par le processus de rewriting (ça semble être traité en interne à la suite du rewriting)
- Dans l'environnement 2, on repasse par le processus de rewriting (a priori c'est vu comme une nouvelle requête HTTP)
La version d'Apache est 2.0.52
Extrait du httpd.conf de server-one.com :
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 # # si on tape / on arrive sur /index.jsp # RewriteCond %{REQUEST_URI} ^/$ RewriteRule ^/ http://server-one.com:7000/index.jsp [L,P] ProxyPass /index.jsp http://anotherserver.com:7005/Accueil/index.jsp ProxyPassReverse /index.jsp http://anotherserver.com:7005/Accueil/index.jsp
Le httpd.conf de server-two.com est identique sauf pour les références au nom de serveur.
Logs de rewrite (1 seul passage par le rewriting) sur le serveur de server-one.com :
Logs de rewrite (2 passage par le rewriting) sur le serveur de server-two.com d'@ IP 000.00.000.02 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 000.00.000.01 - - [27/Jul/2007:13:24:35 +0200] [server-one.com/sid#b4590][rid#1797d8/initial] (2) init rewrite engine with requested uri / 000.00.000.01 - - [27/Jul/2007:13:24:35 +0200] [server-one.com/sid#b4590][rid#1797d8/initial] (3) applying pattern '^/' to uri '/' 000.00.000.01 - - [27/Jul/2007:13:24:35 +0200] [server-one.com/sid#b4590][rid#1797d8/initial] (4) RewriteCond: input='/' pattern='^/$' => matched 000.00.000.01 - - [27/Jul/2007:13:24:35 +0200] [server-one.com/sid#b4590][rid#1797d8/initial] (2) rewrite / -> http://server-one.com:80/index.jsp 000.00.000.01 - - [27/Jul/2007:13:24:35 +0200] [server-one.com/sid#b4590][rid#1797d8/initial] (2) forcing proxy-throughput with http://server-one.com:80/index.jsp 000.00.000.01 - - [27/Jul/2007:13:24:35 +0200] [server-one.com/sid#b4590][rid#1797d8/initial] (1) go-ahead with proxy request proxy:http://server-one.com:80/index.jsp [OK]
En fait c'est le comportement de server-one.com que j'aimerai obtenir sur les deux serveurs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 000.00.000.01 - - [27/Jul/2007:15:37:28 +0200] [server-two.com/sid#b5f20][rid#17a928/initial] (2) init rewrite engine with requested uri / 000.00.000.01 - - [27/Jul/2007:15:37:28 +0200] [server-two.com/sid#b5f20][rid#17a928/initial] (3) applying pattern '^/' to uri '/' 000.00.000.01 - - [27/Jul/2007:15:37:28 +0200] [server-two.com/sid#b5f20][rid#17a928/initial] (4) RewriteCond: input='/' pattern='^/$' => matched 000.00.000.01 - - [27/Jul/2007:15:37:28 +0200] [server-two.com/sid#b5f20][rid#17a928/initial] (2) rewrite / -> http://server-two.com:7000/index.jsp 000.00.000.01 - - [27/Jul/2007:15:37:28 +0200] [server-two.com/sid#b5f20][rid#17a928/initial] (2) forcing proxy-throughput with http://server-two.com:7000/index.jsp 000.00.000.01 - - [27/Jul/2007:15:37:28 +0200] [server-two.com/sid#b5f20][rid#17a928/initial] (1) go-ahead with proxy request proxy:http://server-two.com:7000/index.jsp [OK] 000.00.000.02 - - [27/Jul/2007:15:37:28 +0200] [server-two.com/sid#b5f20][rid#17a928/initial] (2) init rewrite engine with requested uri /index.jsp 000.00.000.02 - - [27/Jul/2007:15:37:28 +0200] [server-two.com/sid#b5f20][rid#17a928/initial] (3) applying pattern '^/' to uri '/index.jsp'
Quelques chose dans l'environnement de serveur-two.com doit modifier le comportement... mais qu'est-ce que ça pourrait être ?
Avez-vous déjà été confronté à ce genre de comportement ?
Avez-vous des docs complémentaires sur l'utilisation de l'option P du RewriteRule couplée à un ProxyPass juste derrière ?
Si je généralise un peu la problématique :
dans httpd.conf de myserver.com :
Scenario :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 RewriteCond %{REQUEST_URI} ^/$ RewriteRule ^/ http://myserver.com/index.jsp [L,P] #<AutresReglesDeRewriting> ProxyPass /index.jsp http://anotherserver.com/Accueil/index.jsp ProxyPassReverse /index.jsp http://anotherserver.com/Accueil/index.jsp
1. L'utilisateur tape http://myserver.com/ dans son navigateur
2. Au niveau du serveur myserver.com, au niveau mod_rewrite, il y a éxécution de la 1ère règle et passage de relais au module mod_proxy avec l'URL http://myserver.com/index.jsp
3. Au niveau du mod_proxy, le serveur fait reverse proxy vers-lui même, mais selon deux comportements possibles (suivant un facteur à déterminer...) :
a) L'URL http://myserver.com/index.jsp est considérée "quelconque" et du coup la requête ré-entre dans le serveur en tant que requête quelconque et donc les règles de rewriting sont appliquées à cette nouvelle requête
b) le serveur "détecte" que c'est un reverse proxy vers lui-même et "squiz" le rewriting applique directement la directive ProxyPass vers http://myserver.com/Accueil/index.jsp
Problème :
Quel facteur permet de déterminer l'alternative entre a) et b) ?
Merci d'avance pour vos réponses.
Partager