Jusqu'à sa version 5, Tomcat était un bon serveur de servlets / JSP, mais manquait de fonctionnalités et peut-être de performances pour rivaliser avec Apache quant au service du contenu statique. La bonne façon de l'utiliser était donc de le cantonner au service des applications web (servlets, JSP, etc...). Apache était en frontal, gérait la sécurité et le contenu statique (pages, images, etc...), et déléguait les requêtes dynamiques à Tomcat.
La configuration pour ce faire reste la même, construite sur le protocole AJP/1.3.
L'arrivée de l'APR (Apache Portable Runtime) au cœur de Tomcat 5.5 lui permet d'utiliser le même code qu'Apache pour gérer le contenu statique, et donc de rattraper ce déficit de performance. Cela dit, le couple Apache / Tomcat fonctionne toujours très bien, et reste encore utilisé.
Permettre à Apache et Tomcat de dialoguer nécessite quelques ajustements techniques à la configuration de Tomcat et d'Apache.
Côté Apache, on doit veiller à trois choses :
au chargement du module mod_jk
;
à correctement configurer le fonctionnement de mod_jk
dans un fichier
de configuration appelé workers.properties
à correctement rediriger les requêtes dynamiques vers Tomcat.
Voici un exemple de configuration côté Apache. Le fichier par défaut de configuration d'Apache
s'appelle httpd.conf
.
Exemple 2.14. Éléments de configuration côté Apache
# Chargement et déclaration du module mod_jk # .dll sous Windows # .so sous Unix / Linux LoadModule jk_module modules/mod_jk.dll AddModule mod_jk.c # déclaration du fichier de configuration de mod_jk JkWorkersFile D:\Tomcat\conf\workers.properties NameVirtualHost * <VirtualHost *> # déclaration et paramétrage d'un hôte virtuel ServerName www.galilee.org DocumentRoot "D:\www\www.galilee.org\htdocs" ErrorLog "D:\www\www.galilee.org \logs\error.log" CustomLog "D:\www\www.galilee.org \logs\access.log" combined # configuration du répertoire contenant les éléments statiques DirectoryIndex index.html <Directory "D:\www\www.galilee.org\htdocs"> Order deny,allow Allow from all </Directory> # configuration de mod_jk <IfModule mod_jk.c> JkLogFile D:\www\www.galilee.org\logs\mod_jk.log JkLogLevel info JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories JkRequestLogFormat "%w %V %T" # redirection de toutes les requêtes commençant par # /webapp vers le connecteur ajp13 # ce connecteur doit être déclaré dans workers.properties JkMount /webapps/* ajp13 </IfModule> </VirtualHost>
Le fichier workers.properties
permet de paramétrer l'accès à Tomcant. Voyons un
exemple.
Exemple 2.15. Exemple de fichier workers.properties
# doit indiquer dans quel répertoire Tomcat est installé workers.tomcat_home=C:\tomcat\apache-tomcat-6.0.29\ #doit indiquer dans quel répertoire le JDK est installé workers.java_home=D:\java\jdk-6.0.18 # la valeur de cette variable est / sur Unix et \ sur Windows ps=\ # liste des workers existants, on peut en mettre plusieurs worker.list=ajp13 # paramétrage de chaque worker déclaré # Tomcat devra écouter le bon port sur le bon hôte, avec le bon protocole worker.ajp13.port=8009 worker.ajp13.host=localhost worker.ajp13.type=ajp13
Dans notre cas, Tomcat devra donc déclarer un connecteur de type AJP 13 écoutant le port 8009.