<br> Le module mod_jk est développé dans le cadre du projet Tomcat et est conçu pour faire communiquer un serveur Web Apache avec une instance de Tomcat, avec le protocole AJP. Il peut être aussi être utilisé pour faire communiquer Apache Web Server avec d’autres serveurs d’applications Java, comme WildFly, JBoss AS ou Glassfish.
Installation
Contrairement à mod_proxy, son concurrent, ce module n’est pas inclus dans les distributions Apache. Il doit donc être installé indépendamment.
Installer le module signifie placer le fichier mod_jk.so dans le répertoire des modules de Apache Web Server. L’emplacement de ce répertoire dépend de la distribution qu’on utilise.
cp mod_jk.so $httpd_home/modules/
Puis il faut déclarer ce module dans httpd.conf.
LoadModule jk_module modules/mod_jk.so
windows[Windows
Le binaire pour Windows peut être téléchargé depuis le site des connecteurs Tomcat.
linux[Linux
Le projet Tomcat ne fournit pas de binaire pour Linux. Il faut donc le compiler soi-même ou éventuellement utiliser les packages natifs.
Pour Ubuntu (testé avec la version 14.04) :
sudo apt-get install libapache2-mod-jk
mac-os-x[Mac OS X
Il n’y a pas de distribution binaire pour Mac OS X. Il faut donc recompiler mod_jk à partir du code source.
Le script ci-dessous a été testé sous Mac OS X 10.9, avec Xcode installé préalablement, pour mod_jk 1.2.40.
sudo ln -s /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.9.xctoolchain
wget http://mir2.ovh.net/ftp.apache.org/dist/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.40-src.tar.gz
tar -zxf tomcat-connectors-1.2.40-src.tar.gz
cd tomcat-connectors-1.2.40-src/native
./configure CFLAGS='-arch x86_64' APXSLDFLAGS='-arch x86_64' --with-apxs=/usr/sbin/apxs
sudo make
sudo make install
Après ça, le binaire est /usr/libexec/apache2/mod_jk.so.
Attention, ce script ne fonctionne qu’avec l’instance Apache fournie avec Mac OS. Si vous utilisez une instance d’Apache installée par homebrew, il faudra pointer sur le bon apxs :
./configure CFLAGS='-arch x86_64' APXSLDFLAGS='-arch x86_64' --with-apxs=/usr/local/sbin/apxs
Ou si vous utilisez XAMPP, le make ci-dessus ne fonctionne pas. Ce script ci-dessous fonctionne (avec XAMPP 1.8.3 / Apache 2.4) :
./configure CFLAGS='-arch x86_64' APXSLDFLAGS='-arch x86_64' --with-apxs=/Applications/XAMPP/xamppfiles/bin/apxs
cd apache-2.0/
make -f Makefile.apxs install
Attention, si vous faites compiler pour plusieurs cibles, sur la même machine, pensez à nettoyer entre chaque build :
sudo make clean
Configuration
httpd-jkconf[httpd-jk.conf
Pour configurer mod_jk, on travaille dans httpd.conf ou dans un fichier (httpd-jk.conf) qui est inclus dans httpd.conf. Là aussi, l’organisation des inclusions dépend de la distribution utilisée ; certaines distributions incluent tous les fichiers d’un répertoire prédéfini (extra, mods-enabled,…) ou font des inclusions fichier par fichier.
Dans ce fichier httpd-jk.conf, on fait pointer le module sur le fichier qui configure les workers, on définit les logs et quelques autres paramètres.
JkWorkersFile extra/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
JkShmFile logs/mod_jk.shm
...
Ensuite, on associe des URLs à des workers avec des points de montage JK.
...
JkMount /swmsg tomcat1
JkMount /swmsg/* tomcat1
...
Enfin, on peut définir les URLs des pages d’administration.
...
<Location /jk-status>
JkMount jk-status
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>
<Location /jk-manager>
JkMount jk-manager
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>
workersproperties[workers.properties
Ce fichier permet de définir les workers, c’est à dire les cibles associées au module. Il y a trois types de cibles : les workers concrets (instances Tomcat, Wildfly, JBoss,…), les workers d’administration (status) et les workers virtuels (lb).
La page de suivi peut être en lecture seule ou en lecture/écriture. Il est d’ailleurs possible de définir plusieurs workers de type status, chacun aura sa propre URL de montage.
worker.jk-status.type=status
worker.jk-status.read_only=true
worker.jk-status.type=manager
worker.jk-status.read_only=false
Dans le fichier httpd-jk.conf, un point de montage utilise le worker tomcat1. Il doit donc être défini dans workers.properties, comme un worker de type ajp13, qui accède à une instance Tomcat locale ou distante.
worker.tomcat1.host=127.0.0.1
worker.tomcat1.port=8009
worker.tomcat1.type=ajp13
Enfin, en début de fichier, on fait la liste des workers qui pourront être montés :
worker.list=jk-status,jkmanager,tomcat1
Load balancing
On configure le load balancer dans le fichier workers.properties. Le balancer est là pour envoyer les requêtes entre différents workers concrets (de type ajp13).
worker.balancer.type=lb
worker.balancer.balance_workers=instance1,instance2
worker.instance1.host=127.0.0.1
worker.instance1.port=8009
worker.instance1.type=ajp13
worker.instance2.host=127.0.0.1
worker.instance2.port=8109
worker.instance2.type=ajp13
Ensuite, on monte le balancer sur l’URL de l’application, dans le fichier httpd-jk.conf.
JkMount /swmsg-web balancer
JkMount /swmsg-web/* balancer
Les requêtes seront alors réparties sur les deux instances.