Utilisation de Tomcat avec Apache

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 :

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.

Exemple 2.16. Exemple de connecteur Tomcat AJP13

<Connector port="8009" 
           protocol="AJP/1.3" 
           redirectPort="8443" />