Apache2 und Tomcat mit mod_jk verheiraten
4. August 2008 von Markus Schwarz [permalink]Es gibt mehrere Gründe, den Apache Tomcat für den Livebetrieb mit dem Apachen zu verbinden. Spätestens wenn man aus Gründen der Lastverteilung oder Ausfallsicherheit auf einen Tomcat Cluster angewiesen ist, wird man über die Konfiguration von mod_jk nachdenken. So erging es mir schon mehrere Male. Hier nun mal ein kurzer Überblick über eine Tomcat 5.5 / Apache2 Basisinstallation auf Debian Linux (etch).
Das wohl beste an Debian ist wohl die meist reibungslose Installation neuer Software mittels der Paketverwaltung apt. Für unseren kleinen Anwendungsfall reicht ein:
$: apt-get install apache2 tomcat5.5 libapache2-mod-jk
Wenn alles geklappt hat, müsste der Tomcat nun auf Port 8080 antworten.
$: lynx localhost:8080
Um nun die Anfragen vom Apache beantworten zu lassen müssen nur noch ein paar Dateien angepasst werden.
$: vim /etc/apache2/mods-available/jk.conf
Hier lassen sich nun beliebige Parameter für das Modul festlegen. Der wichtigste ist jedoch die Angabe der Datei (JkWorkersFile) in der die worker definiert sind. Als worker bezeichnet man die eigentlichen Connectoren zu den Tomcats.
JkWorkersFile /etc/apache2/workers.properties JkLogFile /var/log/apache2/mod_jk.log JkLogLevel info JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " JkRequestLogFormat "%w %V %T"
Als nächstes bearbeiten wir eben diese Definitionen und stellen ein, wie der Tomcat zu erreichen ist. Standardmäßig lauscht der Tomcat auf dem Port 8009 auf Anfragen im Apache JServ Protocol (ajp13). Dies ist der bevorzugte Weg, um den Tomcat vom Apache aus anzusprechen. Wer den Port ändern will auf dem ajp13 gesprochen wird, kann dies in der server.xml des Servlet Containers tun. Nun aber endlich an die eigentliche Konfiguration. Hier ein Beispiel für den einfachsten Fall. Mehr Informationen zu möglichen Parametern und deren Bedeutung gibt es direkt beim Apache Projekt.
$: vim /etc/apache2/workers.properties
worker.list=tomcat1 worker.tomcat1.type=ajp13 worker.tomcat1.host=localhost worker.tomcat1.port=8009 worker.tomcat1.lbfactor=50 worker.tomcat1.cachesize=10 worker.tomcat1.cache_timeout=600 worker.tomcat1.socket_keepalive=1 worker.tomcat1.recycle_timeout=300
Nun ist der Connector fertig konfiguriert. Was noch fehlt ist die Einstellung welche Anfragen der Apache an den Tomcat weiterleiten und welche er selbst beantworten soll. Man bezeichnet erstere als jk-Mount-Points. Sie werden in der httpd.conf eingerichtet. Wenn ein Virtual Host zum Einsatz kommt natürlich in der entsprechenden Virtual Host Definition. Hier zwei Beispiele. Im ersten wird alles unterhalb eines bestimmten Verzeichnisses an den Tomcat weiterleitet. Dies hat zur Folge, dass sowohl dynamischer als auch statischer Content wie Javascript Dateien und Bilder vom Tomcat (über unseren tomcat1 Worker) ausgeliefert werden. Im zweiten Beispiel gilt dies nur für Requests die auf .do enden. der Rest wird vom Apache selbst ausgeliefert.
JkMount /my-app/* tomcat1 JkMount /my-app/*.do tomcat1
Abschließend muss das Modul nur noch eingeschaltet und der Webserver neu gestartet werden.
$: a2enmod jk $: /etc/init.d/apache2 restart
Nun sollte die Applikation auf Port 80 (http://localhost/my-app/) erreichbar sein.
Tags: Apache2, Tomcat
Kategorie: Java, Linux/Unix
