Mar
4
2009

Redirection apache tomcat avec mod_jk et rewriterule


Pour que les utilisateurs de vos applications Tomcat n’aient plus à mémoriser leurs ports, nous pouvons utiliser un module d’apache permettant de discuter avec le serveur Tomcat de manière invisible (Mod_jk).

Exemple :

http://monappli.mondomaine.fr:8080/MonAppli deviendra  http://monappli.mondomaine.fr/MonAppli

Dans cet article, nous verrons également comment rediriger http://monappli.mondomaine.fr/ vers http://monappli.mondomaine.fr/MonAppli automatiquement.

Pré-requis :

Récupérer le mod_jk :

http://archive.apache.org/dist/jakarta/tomcat-connectors/jk/source/jk-1.2.15/

Véfifiez que le paquet http-devel est bien installé.

Mise en œuvre :

Décompresser  jakarta-tomcat-connectors-1.2.15-src.tar.gz :

tar xvzf jakarta-tomcat-connectors-1.2.15-src.tar.gz

Compiler mod_jk :

cd jakarta-tomcat-connectors-1.2.15-src/jk/native

./configure –with-apxs=/usr/sbin/apxs

make

Placer le fichier mod_jk.so dans /etc/httpd/modules

cd apache-2.0

cp mod_jk.so /etc/httpd/modules

Création du fichier workers.properties permettant à apache de discuter avec le serveur Tomcat

touch /etc/httpd/workers.properties

vi /etc/httpd/workers.properties

Copiez ce texte dans le fichier en le modifiant les données en rouge pour qu’elles correspondent à votre configuration.

workers.tomcat_home=/usr/local/tomcat # Chemin vers votre serveur Tomcat

workers.java_home=/usr/java/jdk1.5.0_15 # Correspond au JAVA_HOME

ps=/

worker.list=worker1 # Correspond au nom de la liaison entre apache et tomcat

worker.worker1.port=8009 # Correspond au port AJP 1.3 du serveur Tomcat

worker.worker1.host=localhost

worker.worker1.type=ajp13

worker.worker1.lbfactor=1

worker.loadbalancer.type=lb

worker.loadbalancer.balanced_workers=worker1 # Pour faire de la repartition de charge

worker.inprocess.type=jni

worker.inprocess.class_path=$(workers.tomcat_home)$(ps)lib$(ps)tomcat.jar

worker.inprocess.cmd_line=start

worker.inprocess.jvm_lib=$(workers.java_home)$(ps)jre$(ps)lib$(ps)

i386$(ps)classic$(ps)libjvm.so

worker.inprocess.stdout=$(workers.tomcat_home)$(ps)logs$(ps)inprocess.stdout

worker.inprocess.stderr=$(workers.tomcat_home)$(ps)logs$(ps)inprocess.stderr

Configuration de tomcat :

Ouvrir le fichier server.xml situé dans le répertoire « conf » de l’arborescence tomcat et ajoutez :

Ajoutez à la fin du fichier entre les balises <Host> et <Engine> :

<Listener className=”org.apache.jk.config.ApacheConfig” modJk=”/etc/httpd/modules/mod_jk.so
workersConfig=”/etc/httpd/workers.properties“/>

Configuration d’apache :

Ouvrir le fichier httpd.conf situé généralement dans /etc/httpd/conf/httpd.conf

Chercher les lignes correspondant à « LoadModule » et ajoutez à la fin de la liste :

LoadModule jk_module “/etc/httpd/modules/mod_jk.so” # Chemin du module JK

JkWorkersFile “/etc/httpd/workers.properties” # Chemin du fichier workers.properties

JkLogFile “/usr/local/tomcat/logs/mod_jk.log” # Chemin du fichier log de mod_jk

JkShmFile “/usr/local/tomcat /logs/mod_jk.shm” # Chemin du fichier shm du mod_jk

JkLogLevel info # Niveau de log

JkLogStampFormat “[%a %b %d %H:%M:%S %Y] ” #Format des logs

Le VirtualHost devra ressembler à cela :

<VirtualHost *:80>

ServerName monappli.mondomaine.fr

ServerAlias monappli

CustomLog logs/monappli_access.log combined

ErrorLog logs/monappli_error.log

JkMount /* worker1 #Il faut utillisé le meme nom que dans le fichier workers.properties

JkLogFile logs/MonAppli_mod_jk.log

JkLogLevel 9

</VirtualHost>

Redémarrer Apache et Tomcat :

/usr/local/tomcat/bin/shudown.sh

/usr/local/tomcat/bin/startup.sh

Service httpd restart

Pour tester, allez avec votre navigateur sur monappli.mondomaine.fr/MonAppli

Réécriture d’url :

Pour ne plus avoir à taper le nom de l’appli après le domaine, il faut faire de la réécriture d’Url.

Exemple :

Nous avons une application qui est accessible via http://monappli.mondomaine.fr/MonAppli. Nous voulons modifier l’url pour que lorsque l’on pointe sur http://monappli.mondomaine.fr/ , nous accédions automatiquement à http://monappli.mondomaine.fr/MonAppli/.

Pour cela, ouvez votre fichier httpd.conf. Dans le VirtualHost correspondant à votre application, ajouté à la fin :

RewriteEngine On

RewriteRule ^/$ /MonAppli [PT]

Et voilà une belle redirection n’est ce pas??

Au sujet de l'auteur: Olivier Legras

Auteur de ce Blog, je partage quelques unes de mes notes que je juge utile à vous comme à moi. Je suis très heureux de voir que mon blog a de plus en plus d'affluence. Merci à vous!

2 Comments + Add Comment

  • Bonjour,
    Est til possible de faire une redirection tout en gardant l’URL saisi?
    C’est à dire lorsque j’écris http://monapplifrancais.com j’aimerais qu’il redirige sur http://monappli.com/francais mais que l’url dans le navigateur reste http://monapplifrancais.com

    Merci

  • Bonjour,

    Tout d’abord, merci pour cet article, clair et intelligent.

    J’ai un petit problème avec la redirection.
    En faisant comme toi (c’est a dire “RewriteRule ^/$ /MonAppli [PT]”) Si je veux
    http://www.mondomaine.fr/, j’obtiens http://www.mondomaine.fr/MonAppli.

    Ce que je voudrais c’est que pour cet virtualhost http://www.mondomaine.fr/ -> obtient http://www.mondomaine.fr/ mais dans mon appli.
    J’ai trouvé cette expression pour cela :
    rewriteRule ^/(.*)$ /MonAppli/$1 [L,PT]
    cela fonctionne très bien, sauf que j’ai l’impression de ne plus avoir de session ou renouveler à chaque requête.
    Merci pour ton aide.

Laissez un commentaire