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 :

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]
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
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'
En fait c'est le comportement de server-one.com que j'aimerai obtenir sur les deux serveurs.
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 :

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
Scenario :

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.