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 :

[URL Rewriting] RewriteRule [L,P] vers localhost


Sujet :

Apache

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut [URL Rewriting] RewriteRule [L,P] vers localhost
    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.

  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
    C'est bizarre de faire du proxy vers le même serveur mais bon...

    En fait, je ne suis pas sûr de pouvoir répondre à ta question. Y a juste un truc que je trouve surprenant dans les traces de logs que tu donnes : dans les traces de server-one, on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (2) rewrite / -> http://server-one.com:80/index.jsp
    (2) forcing proxy-throughput with http://server-one.com:80/index.jsp
    (1) go-ahead with proxy request proxy:http://server-one.com:80/index.jsp [OK]
    Y a une référence au port 80 alors que ta règle de réécriture fait référence au port 7000. Et ce n'est pas le cas dans les traces de server-two. Donc est-ce une erreur de retranscription des traces ou la réalité ? Si c'est la réalité, ça ne me semble pas étranger au problème.


    Pour ce qui concerne ta distinction, le fait de pouvoir dire "le serveur "détecte" que c'est un reverse proxy vers lui-même et "squiz" le rewriting" ne me semble pas possible simplement. En fait, Apache va émettre une requête HTTP sur lui-même. Il va donc recevoir une nouvelle requête HTTP et la traiter sans tenir compte du contexte. La requête doit donc logiquement passer par les règles de réécriture. Donc si tu veux séparer les choses, à mon avis, faut passer par des virtual hosts pour pouvoir appliquer des règles de réécriture ou de proxy différentes :
    - VH1 = point d'entrée des utilisateurs : server-one:port1. Dans ce VH, tu fais la réécriture et le proxy pass vers VH2.
    - VH2 = point d'entrée du proxy : server-one:port2. Contient et sert index.jsp, etc.

Discussions similaires

  1. Réponses: 7
    Dernier message: 01/09/2010, 20h41
  2. [URL Rewriting] rediriger .php vers .html
    Par Gunner4902 dans le forum Apache
    Réponses: 8
    Dernier message: 27/12/2007, 08h59
  3. [URL Rewriting] Redirection dossier vers lien
    Par alikharchafi dans le forum Apache
    Réponses: 13
    Dernier message: 16/10/2007, 14h48
  4. [URL Rewriting] RewriteRule qui patine
    Par Leobaillard dans le forum Apache
    Réponses: 1
    Dernier message: 09/10/2007, 17h23
  5. [URL Rewriting] redirection vers un répertoire
    Par wace dans le forum Apache
    Réponses: 1
    Dernier message: 31/07/2007, 16h29

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