Mise en place ProxyPass => Problemes de patterns ?

Questions sur les problèmes d'intégration de Tomcat avec Apache (mod_jk, mod_jk2...).

Modérateur : Modérateurs

Avatar de l’utilisateur
Atma
Nouveau membre
Messages : 9
Inscription : jeu. 12 oct. 2006, 18:08

Mise en place ProxyPass => Problemes de patterns ?

Messagepar Atma » lun. 16 oct. 2006, 15:10

Bonjour à tous !

Je suis en train d'essayer de mettre en place un serveur apache qui va taper sur un serveur tomcat pour tout ce qui est "traitements" (en gros, *.jsp et *.do)
Je me tournais vers mod_jk la semaine derniere, mais depuis, j'ai vu que la routine "ProxyPass" existait sous apache2 (et ca me sauve la mise puisque sur le serveur apache de production, il existe déjà une redirection d'apache vers un tomcat ... 4 !... alors que je veux taper sur un tomcat 5 :p)

Dans le server.xml de mon tomcat 5, j'ai :

Code : Tout sélectionner

    <Connector port="8059" protocol="AJP/1.3" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" redirectPort="8443">
    </Connector>


Maintenant, dans mon virtual host d'apache, ce que j'ai (et que je n'ai pas le "droit" de toucher) :

Code : Tout sélectionner

    JkMount /*.jsp ajp13
    JkMount /servlet/* ajp13
    JkMount /*.do ajp13

=> Le "worker" ajp13 va se connecter sur le tomcat 4 ... lui je veux l'éviter !

Donc j'ai tenté :

Code : Tout sélectionner

    ProxyPass /monprojet/*.jsp ajp://localhost:8059/monprojet/
    ProxyPass /monprojet/*.do ajp://localhost:8059/monprojet/

Mais les "patterns" ne matchent pas (en fait, il va encore tapper sur tomcat4 .... meme si je met les proxypass avant les jkmount !)

Ensuite, pensant que proxypass ne "reconnaissait" pas le *, j'ai tenté :

Code : Tout sélectionner

    ProxyPass /monprojet/ ajp://localhost:8059/monprojet/

mais j'obtiens un joli message "forbidden" .. grrr

M'y suis-je mal pris ? (il est fortement possible que je n'ai pas compris tous les tenants et aboutissants de ProxyPass)


PS: le "forbidden" peut être dû à deux choses :
- je m'y suis mal pris
- je n'ai pas bien configuré l'accès à /monprojet du coté d'apache (puisque dans mon document root, j'ai un répertoire "monprojet" qui contient toutes les ressources "statiques" de mon projet (images, js, css etc..))

Merci d'avance :)
Image

Avatar de l’utilisateur
karrakis
Membre ancien
Membre ancien
Messages : 444
Inscription : lun. 26 avr. 2004, 12:29
Localisation : Paris
Contact :

Messagepar karrakis » mar. 17 oct. 2006, 14:47

Pour le forbidden, est ce que ton "client" a le droit de passer pas les directive proxy.

verifie que tu n'ai pas un <Proxy *>
Order deny, Allow
Deny for All
</Proxy>

qui traine.

Pour le reste je comprend pas vraiment ce que tu veux faire :s

Avatar de l’utilisateur
Atma
Nouveau membre
Messages : 9
Inscription : jeu. 12 oct. 2006, 18:08

Messagepar Atma » mar. 17 oct. 2006, 14:55

bah en gros, mon probleme est "clairement" formulé ici : http://www.apachefrance.com/phpBB2/viewtopic.php?t=7379

Grosso modo, j'ai un probleme : je veux pouvoir avoir un apache2 qui redirige tantot sur un tomcat4, tantot sur un tomcat5 (suivant l'url demandée)

J'avais tenté la piste du "proxypass" puisque visiblement, le mod_jk ne permet pas de spécifier 2 tomcat_home, du coup j'utilisais le mod_jk "deja existant" pour les redirections tomcat4 "deja existantes", et je "rajoutais une couche" proxypass pour rediriger vers ma nouvelle appli tournant sous tomcat5 :)

M'enfin j'ai eu plus de déboires qu'autre chose avec proxypass (comme je disais précédemment, les "*" n'avaient pas l'air d'être prises en compte puisque dans mes log, a aucun moment, je ne voyais que mon url soumise ne correspondait à un "pattern" de proxypass => c'était impossible de rediriger vers tomcat5 (maintenant, c'est possible que je m'y sois mal pris hein ^^))

=> J'ai vérifié : aucune balise <proxy> nulle part :/
Image

Avatar de l’utilisateur
bgarnier
Membre ancien
Membre ancien
Messages : 180
Inscription : mer. 04 févr. 2004, 12:45
Localisation : Ile de france

Messagepar bgarnier » mer. 25 oct. 2006, 18:43

Bonjour,

Avant tout il est important de connaître la version utilisée en ce qui concerne mod_jk.

Est-ce l'ancienne version ou la nouvelle ( jk-1.2.x ).

Autre remarque, lorsque vous utilisez l'hébergement virtuel par nom ( NameVirtualHost ) apache tire parti de l'en-tête de requête introduit par HTTP/1.1. Le navigateur client HTTP/1.1 envoie un en-tête host pour préciser le nom de la machine serveur qui doit répondre à sa requête. Lorsque apache rencontre dans le fichier de configuration httpd.conf la directive NameVirtualHost, il met en place une table d'hôte virutel pour l'adresse IP indiquée dès lors pour une adresse IP donnée il ne peut y avoir qu'une seule directive NameVirtualHost, cependant plusieurs hôtes virtuels peuvent être définis pour une même adresse chacun ayant son propre nom définis par une directive ServerNamecorrespondant à l'en-tête hostde la requête HTTP/1.1.

Si aucune correspondance n'est trouvée pour l' host demandé,c'est le premier hôte virtuelVirtualHost défini pour l'adresse IP qui sera selectionné.

Aussi je vous propose les directives suivantes pour la mise en place d'un hébergement virtuel par nom :

Code : Tout sélectionner

NameVirtualHost *:80 # * pour recevoir les requêtes sur toutes les interfaces

<VirtualHost *:80>
        DocumentRoot /var/www/
        ServerName <le nom de la machine serveur tomcat5>
        #....
        JkMount "/monprojet/*.do" tomcat5
        JkMount "/monprojet/*.jsp" tomcat5
</VirtualHost>

<VirtualHost *:80>
        DocumentRoot /var/www/
        ServerName <le nom de la machine serveur tomcat4>
        #....
        JkMount "/*.do" tomcat4
        JkMount "/*.jsp" tomcat4
</VirtualHost>


Avant de poursuivre la configuration entre votre serveur Apache et vos deux serveurs tomcat, il est important de connaître la version de mod_jk.
D'après les quelques lignes de configuration je penche pour une ancienne version de mod_jk si c'est le cas alors il ne faut pas utiliser le type ajp12 qui n'est pas supporté avec Tomcat5.x.

Editer après sauvegarde le fichier de configuration worker spécifique à tomcat4 et ajouter ou modifier les quelques lignes suivantes :

Code : Tout sélectionner

worker.list=tomcat4,tomcat5
# Set properties for tomcat4 (ajp13)
worker.tomcat4.type=ajp13
worker.tomcat4.host=locahost
worker.tomcat4.port=<le port ajp13 en écoute pour tomcat 4>
worker.tomcat4.lbfactor=50
worker.tomcat4.cachesize=10
worker.tomcat4.cache_timeout=600
worker.tomcat4.socket_keepalive=1
worker.tomcat4.socket_timeout=300

# Set properties for tomcat5 (ajp13)
worker.tomcat5.type=ajp13
worker.tomcat5.host=locahost
worker.tomcat5.port=8059
worker.tomcat5.lbfactor=50
worker.tomcat5.cachesize=10
worker.tomcat5.cache_timeout=600
worker.tomcat5.socket_keepalive=1
worker.tomcat5.socket_timeout=300


Personnellement je fais toujours correspondre le nom du worker tomcat4 ou tomcat5 avec l'attribut jvmRoute situé dans le fichier server.xml du/des serveurs tomcat comme recommandé avec jk-1.2.x même si je n'utilise pas le load-balacing :

Code : Tout sélectionner

<Engine name="Standalone" defaultHost="localhost" debug="0" jvmRoute="tomcat5 ou tomcat4">


Enfin, il faut faire trés attention à mettre en commentaire le connecteur correspondant à mod_jk2 et à décommenter le connecteur correspondant à mod_jk, dans le fichier de configuration server.xml, rechercher la phrase suivante mise en commentaire :

Code : Tout sélectionner

<!-- Define an AJP 1.3 Connector on port 8009 -->
bon il faut dans votre cas changer le port 8009 en 8059 pour correspondre à votre configuration.


Cordialement Benoît

Avatar de l’utilisateur
Atma
Nouveau membre
Messages : 9
Inscription : jeu. 12 oct. 2006, 18:08

Messagepar Atma » mer. 25 oct. 2006, 19:18

ok merci beaucoup :)
En fait, un élément m'avait induit en erreur dans mon worker.properties "modèle" que j'avais récupéré sur une autre machine ... la propriété worker.tomcat_home qui m'avait fait penser qu'un worker ne pouvait pointer que sur un et un seul tomcat ... mais en fait cette propriété ne sert visiblement pas dans mon cas puisque lorsque je l'enleve, cela ne pose pas de probleme :)

=> ca m'a plus embrouillé qu'autre chose grrr :)

Merci en tous cas ;)
Image

Avatar de l’utilisateur
bgarnier
Membre ancien
Membre ancien
Messages : 180
Inscription : mer. 04 févr. 2004, 12:45
Localisation : Ile de france

Messagepar bgarnier » mer. 25 oct. 2006, 22:41

Re-Bonjour,

Juste un bémole à mon propos précedant, en regardant de plus près la configuration du fichier server.xml de mon serveur tomcat 5.0.28 il n'existe pas de connector spécifique à ajp 1.3 uniquement, mais cela marche trés bien si vous utilisez le connector Coyote JK2/AJP 1.3.

Cordialement Benoît Garnier.

PS: Pour les mauvaises langues, je viens de compiler les sources d'apache dans sa version 2.2.3 et également les sources du connector tomcat JK-1.2.19 pour vérifier si effectivement il y a un problème avec mod_jk et bien ce n'est pas le cas.


Revenir vers « Intégration Apache »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité