Das ist ein kurzes Howto um Servlet-Container wie z.B. Tomcat via AJP hinter ein Apache zu hängen und so z.B. eine seperierung zwischen statischer Contentauslieferung und dem tatsächlichen Java Projekt zu erzielen.
AJP verfügbarkeit testen
Zuerst prüfen wir ob der Tomcat auch wirklich mit AJP läuft, standmässig ist der AJP Port 8009 aktiviert. Wir schauen also mit netstat nach dem der Tomcat läuft kurz nach.
netstat -lanp | grep "8009"
tcp6 0 0 127.0.0.1:8009 127.0.0.1:50610 VERBUNDEN 7257/jsvc
tcp6 0 0 127.0.0.1:8009 127.0.0.1:50734 VERBUNDEN 7257/jsvc
tcp6 0 0 127.0.0.1:8009 127.0.0.1:60735 VERBUNDEN 7257/jsvc
Sollte der AJP Connector nicht definiert sein (bei Debian ist der von haus aus aktiviert). Kann in der server.xml des Tomcats folgender Eintrag einkommentiert werden.
...
...
Nach einem neustart sollte er dann verfügbar sein.
MOD_JK istallieren und aktivieren
Als nächstes installieren wir mod_jk und aktivieren es für den Apache2
# modul installieren
aptitude install libapache2-mod-jk
# mod_jk aktivieren
a2enmod jk
Worker properties definieren
Unter Debian ist mod_jk per default so konfiguriert, dass unter /etc/apache2 ein Mountfile liegen kann, dass spezifiziert wie Servlet container angesprochen werden. Diese Einstellung wird durch den Eintrag in
JkWorkersFile /etc/apache2/mods-enabled/jk.conf festgelegt. Alles was wir machen müssen ist jetzt ein Worker File zu bauen.
# Define list of workers that will be used
# for mapping requests
worker.list=multiNode
# Define Node1
# modify the host as your host IP or DNS name.
worker.tomcat01.port=8009
worker.tomcat01.host=192.168.0.44
worker.tomcat01.type=ajp13
worker.tomcat01.lbfactor=1
worker.tomcat02.port=8009
worker.tomcat02.host=192.168.0.45
worker.tomcat02.type=ajp13
worker.tomcat02.lbfactor=1
# Load-balancing behaviour
worker.multiNode.type=lb
worker.multiNode.balance_workers=tomcat01,tomcat02
worker.multiNode.sticky_session=0
Das ganze speichert man unter /etc/apache2/worker.properties
Virtualhost konfigurieren und aktivieren
Als nächstes konfigurieren wir einen Virtualhost und hängen die Tomcats entsprechend in den Apache ein. Dazu erstellen wir unter /etc/apache2/sites-available/tomcattest einen neuen Virtualhost
ServerName www.myserver.address.com
DocumentRoot "/var/www/default"
# Options Indexes FollowSymLinks MultiViews
Options None
AllowOverride None
Order allow,deny
allow from all
# Send myDeployment to multiNode-Worker
JkMount /myDeployment/ multiNode
JkMount /myDeployment/* multiNode
Was hier geschieht ist, das unsere Seite per Default unter /var/www/default erreichbar ist, nur der pfad /myDeployment soll zu den Tomcat-Workern geschickt werden. Ist das WebProjekt auf unseren Tomcat unter localhost:8080/myDeployment direkt ansprechbar muss das Unterverzeichnis entsprechend unter mod_jk eingehangen werden. Allerdings könnte ein Corner-Case sein, das unser projekt direkt in den Tomcat Root deployed wurde und es kein Unterverzeiczhnis ist. Dann müssen wir die Einträge etwas umschreiben.
...
# This goes to Tomcat Servlet Containers
JkMount /* multiNode
# It's Apaches job to deliver images so make sure we're not pointing him to multiNode
JkUnMount /images multiNode
...
Jetzt noch den virtual host aktivieren und testen:
a2ensite tomcattest
apache2ctl configtest
apache2ctl restart
Das ist eigentlich alles nach einem restart solltet ihr Verbindung mit dem Apache haben. Sollte es Probleme geben, den Tomcat zu erreichen kann unter Debian das mod_jk.log unter /var/log/apache2/mod_jk.log konsultiert werden.