On peut installer Tomcat derrière un serveur frontal pour plusieurs raisons. Cela peut être pour donner plus de souplesse à l’environnement de déploiement, pour augmenter la sécurité ou pour factoriser des ressources statiques. Quelle que soit la raison, l’utilisation d’Apache Httpd est un grand classique, que ce soit avec le mod_proxy ou avec le mod_jk.
Dans cette article, je présente les premiers pas pour installer Tomcat 6 derrière Apache Httpd 2.2 avec le mod_proxy. Là encore, il reste un choix pour le protocole, puisque mod_proxy supporte, entre autres, les protocoles HTTP et AJP.
Premiers pas
Pour aller vite, voici l’installation la plus sommaire pour faire fonctionner cet environnement. Dans l’exemple ci-dessous, j’utilise le protocole AJP, mais l’exemple pourrait très facilement se traduire pour le protocole HTTP.
Configuration Tomcat
Pour que Tomcat supporte le protocole AJP, il lui faut un connecteur correspondant. Les connecteurs se configurent dans le fichier <catalina_base>/conf/server.xml. La portion de configuration ci-dessous est présente par défaut à l’installation de Tomcat :
<Connector port="8009" protocol="AJP/1.3" />
Cette ligne suffit à faire en sorte que Tomcat supporte le protocole AJP sur le port 8009.
Configuration Apache
La façon de configurer Apache Httpd dépend de la façon dont il a été installé et, pour Linux, de la distribution utilisée. Le principal fichier de configuration est <httpd_base>/conf/httpd.conf, mais il est fréquent que des éléments de configuration soient répartis dans d’autres fichiers et importés dans la configuration globale avec la directive Include.
Configuration Apache sous Debian / Ubuntu
Sous Debian, la pratique pour configurer un nouveau module est de placer un fichier avec l’extension load pour configurer le chargement du module et un fichier avec l’extension conf pour la configuration à proprement parler.
Pour le mod_proxy, on aura donc un fichier proxy.load et un fichier proxy_ajp.load, pour le chargement du mod_proxy et de sa couche de transport par AJP. Ces fichiers existent dans le répertoire /etc/apache2/mods-available/, et sont effectivement utilisés lorsqu’on mets un lien symbolique depuis /etc/apache2/mods_enabled/.
ln -s /etc/apache2/mods-available/proxy.load /etc/apache2/mods_enabled/
ln -s /etc/apache2/mods-available/proxy_ajp.load /etc/apache2/mods_enabled/
Ensuite, pour la configuration du proxy (en mode reverse), on crée un fichier /etc/apache2/mods-available/proxy-swmsg.conf (le nom importe peu, ici swmsg est le nom de mon application), et on fera un lien symbolique dans /etc/apache2/mods-enabled/.
touch /etc/apache2/mods-available/proxy-swmsg.conf
ln -s /etc/apache2/mods-available/proxy-swmsg.conf /etc/apache2/mods_enabled/
Configuration Apache sous Windows
Windows n’étant plus mon système d’eploitation habituel, il risque d’y avoir quelques incohérences dans ma description, mais j’essaie quand même, en me basant sur une installation standard d’Apache Httpd.
Le fichier de configuration principal est C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf et les fichiers secondaires sont dans C:\Program Files\Apache Software Foundation\Apache2.2\conf\extra\. Pour activer le mod_proxy et sa couche de transport AJP, je vais dans le fichier httpd.conf et je décommente les deux lignes suivantes :
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
Puis je crée un fichier proxy-swmsg.conf dans le répertoire extra, que je référence en fin de fichier httpd.conf par la directive Include.
Include conf/extra/proxy-swmsg.conf
Configuration mod_proxy
Cette portion de configuration est dans le fichier proxy-swmsg.conf qui aura été créé au préalable par une des procédures ci-dessus.
<Proxy /swmsg>
ProxyPass ajp://localhost:8009/swmsg
ProxyPassReverse ajp://localhost:8009/swmsg
</Proxy>
Après redémarrage de Apache, les requêtes sur http://localhost/swmsg, ou http://myserver/swmsg seront traitées par Tomcat.
Configuration avancée
La configuration présentée dans les premiers pas est très souvent insuffisante. TODO…