Apache2 + Tomcat 6.0.x + mod_jk 1.2.x

Nachfolgend wird hier beschrieben wie man den apache2 Webserver und den Tomcat 6.0.16 Servletcontainer mit dem mod_jk 1.2.26 verbinden kann. Die Beschreibung bezieht sich auf einen Linux Debian 4.1.X Server mit 2.6.X Kernel, auf dem ein apache2 Webserver, Tomcat 6.0.16 und Java 5.0 installiert und betriebsbereit ist.

Der Tomcat liefert standardmaessig seine Applikationen unter dem Port 8080 aus. Diese Eigenschaft hat Nachteile, weil in vielen Firmennetzen der Port 8080 durch eine Firewall geblockt wird. Der Standard HTTP Port 80 dagegen ist in fast allen Netzen offen.
Der Tomcat laesst sich natuerlich auch so konfigurieren das er auf dem Port 80 horcht. Wenn auf dem gleichen Server aber schon ein Webserver installiert ist, kommt es schnell zu Konflikten. Die eleganteste Loesung besteht darin, den Webserver so zu konfigurieren, dass er bestimmte Domainanfragen an den Tomcat weiterleitet und die Antwort vom Tomcat an den Client weiterschickt.

Um den Apache2 Webserver und den Tomcat Sevletcontainer miteinander zu verheiraten muss man das mod_jk 1.2.26 installieren. Die Entwicklung des mod_jk 2.0 wurde wegen zu komplexer Konfiguration eingestellt, statt dessen wurde die alte Version komplett ueberarbeitet. Die aktuelle Version ist NICHT die 2.0 Serie sondern die mod_jk 1.2.26, welche unter folgender URL zum download bereit steht:

http://tomcat.apache.org/download-connectors.cgi

Da es fuer Debian zu Zeit keine mod_jk binary gibt, muss man sich die Source runter laden und compilieren. Nach dem Download sollte man mit folgenden Befehlen das Packet entpacken und in das native Verzeichnis wechseln.

debian:~# tar -xzvf tomcat-connectors-1.2.26-src.tar.gz
debian:~# chmod -R 755 tomcat-connectors-1.2.26-src
debian:~# cd tomcat-connectors-1.2.26-src/native

Anschliessend muessen fuer die Konfiguration, Kompilierung und Installation folgende drei Befehle ausgefuehrt werden.

debian:~# ./configure --with-apxs=/usr/bin/apxs2
debian:~# make
debian:~# make install

Wenn bei den letzten drei Befehlen Fehler auftreten dann liegt das vielleicht daran das Entwickler-Tools auf dem Server fehlen. Folgender Befehl kann Abhilfe schaffen:

debian:~# apt-get install libtool autoconf gcc apache2-prefork-dev g++

Nach der erfolgreichen Installation des mod_jk Modules muss als naechstes der apache2 Webserver konfiguriert werden. Als erstes muss eine workers.properties Datei erstellt werden.

debian:~# emacs /etc/apache2/workers.properties

Meine workers.properties Datei hat folgenden Inhalt

# Tomcat an Java configuration
#
workers.tomcat_home=/opt/tomcat/
workers.java_home=/opt/java/
ps=/worker.list=mainworker

# Definition for local worker using AJP 1.3
#
worker.mainworker.type=ajp13
worker.mainworker.port=8009
worker.mainworker.cachesize=20

Hier wird der aktuelle Pfad zu tomcat und zu java festgelegt und eine worker Liste beschrieben. In den letzten drei Zeilen wird der mainworker konfiguriert. Der Port 8009 ist ein Standardport fuer den ajp13-Connector von Tomcat. Dieser Wert ist nach dem entpacken von Tomcat standardmaessig in der <tomcat>conf/server.xml eingetragen. Wenn hier in der workers.properties ein anderer Wert eingetragen wird, dann muss die Portnummer in der server.xml vom Tomcat angepasst werden.
Der Name “mainworker” muss in die server.xml noch eingetragen werden.

<Engine name="Catalina"  defaultHost="localhost"  jvmRoute="mainworker"  >

Die eben gezeigte Zeile ist in der server.xml schon vorhanden. Sie muss lediglich um das Attribut jmvRoute=”mainworker” ergaenzt werden. Als naechstes oeffnen wir mit folgendem Befehl die apache2 Konfigurationsdatei:

debian:~# emacs /etc/apache2/apache2.conf

An letzter Stelle muss folgende Zeile hinzugefuegt werden

Include /etc/apache2/sites-enabled/

In dem Verzeichnis /etc/apache2/sites-enables/ befindet sich eine Datei mit dem Namen “000-default”. Die Datei ist in wirklichkeit ein Symlink auf “/etc/apache2/sites-available/default”, aber das soll uns nicht weiter stoeren. Die Datei kann mit jedem beliebigen Texteditor geoeffnet werden und muss um die folgenden Zeilen an erster Stelle ergaenzt werden.

<IfModule !mod_jk.c>
LoadModule jk_module "/usr/lib/apache2/modules/mod_jk.so"
</IfModule>

JkWorkersFile "/etc/apache2/workers.properties"
JkLogFile "/opt/tomcat/logs/mod_jk.log"
JkLogLevel info

In der gleichen Datei befindet sich ein Abschnitt mit VirtualHost, der um die JkMount Eintraege ergaenzt werden muss.
NameVirtualHost *

<VirtualHost *>
ServerAdmin webmaster@localhost
ServerAlias ploin.de www.ploin.de

DocumentRoot /var/www/
..
..
..
..

JkMount /robertReiz mainworker
JkMount /robertReiz/* mainworker

</VirtualHost>

Die letzten zwei Zeilen im VirtualHost Abschnitt teilen den Webserver mit das er alle Anfragen die mit robertReiz beginnen an den mainworker weiter leiten soll.

Nun muessen nur noch der Tomcat und der apche2 Webserver neu gestartet werden. Damit ist die Konfiguration abgeschlossen.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s