Redirection sur le port 80 mod_jk vs mod_proxy: mod_jk utile si Tomcat doit vraiment écouter sur le port 80
Bonjour,
C'est en fait un problème déjà résolu.
Je me permets de laisser un message sur ce sujet un peu tarte à la crème, car j'ai été confronté récemment à un problème et j'ai remarqué que dans certains cas mod_jk (plus difficile à configurer que la redirection par proxy) s'impose: si le contexte de l'applicatif java doit "faire comme si" il écoutait sur le port d'Apache HTTP (exemple: HttpServletRequest.getLocalPort() doit ramener 80 au lieu de 8080).
Mon problème était le suivant:
1) j'avais un web service (un WMS pour des cartes géographiques) XML tournant sur Tomcat, sur le port 8080. Il est caché derrière un Proxy Apache sur la même machine et répond bien au requêtes sur le port 80.
Le webservice Tomcat renvoie du XML avec des URL des services qu'il héberge, qui sont parsées par d'autres sites, mais celles-ci contienne toujours le port 8080. Ex:
Code:
1 2
|
<UrlService>http://monserveur.com:8080/monService?</UrlService> |
2) Un beau jour, le gestionnaire d'un service extérieur qui utilise ces URL m'indique qu'il ne peut plus accepter que celles qui indiquent le port "standard" pour HTTP: 80.
3) J'essaye plusieurs configurations de type "ProxyPass" et "ProxyPassReverse", du URL rewriting, etc... mais impossible d'arriver au résultat souhaité (ce qui logique car Tomcat continue bien d'écouter sur 8080 dans son propre contexte, le proxy n'intervient qu'au niveau du cheminement des requêtes)
4) Je me dis, "Les URL sont peut-être en partie hardcodées dans le service, il va falloir revenir au code source de l'application, modifier la ligne de code qui génère ces URL et regénérer un war via Maven et Eclipse". (chouette, j'adore cela..:?) .
Un examen du code révèle que le port dans le chemin de l'URL est généré par un appel à la méthode getLocalPort() de la classe HttpServletRequest , c'est donc bien une valeur générée dynamiquement et liée au contexte dans lequel tourne Tomcat.
C'est en fait de la bonne programmation mais ne résout pas mon problème...
Du coup je ne suis pas sûr que la changer à un seul endroit du code va bien résoudre le problème. Et surtout, c'est une solution ad-hoc problématique pour la maintenance et l'upgrade de l'applicatif.
5) Je configure mod_jk (la seule solution que je n'ai pas encore essayée) de la manière décrite ainsi :
http://notetodogself.blogspot.be/201...jk-tomcat.html
...et "miracles" les chemins d'URL généré par l'applicatif sur Tomcat contiennent bien le port 80!
je n'ai pas trouvé tellement de documentation sur cet aspect là de la redirection entre Tomcat et Apache sur Internet et ai perdu beaucoup de temps à tester différentes possibilités.