Inhaltsverzeichnis
Apache HTTP Server CentOS 6 - mod_jk - Apache Tomcat Kommunikation
Ein sehr häufige Kombination besteht aus dem Apache HTTP Webserver und dem Apache Tomcat.
Zwei der Möglichkeiten, wie so eine Verbindung zustande kommen kann, sollen im folgenden beschrieben werden. Die Möglichkeiten sind
- mod_jk
- mod_proxy_ajp
Ich persönlich bevorzuge die Möglichkeit über mod_jk. Die Gründe dafür sind historisch bedingt, da diese Art der Verbindung der beiden Server bereits vor der Möglichkeit der Nutzung von mod_proxy_ajp bestanden hat. Zum anderen sind meiner Ansicht folgende Vorteile gegeben:
- Senden von spezifischen Anfragen an den Apache Tomcat z.B. (nur *.jsp-Seiten)
- Logging Möglichkeiten (mod_jk.log)
Nachteile sind jedoch:
- Aufwendigere Konfiguration
- Keine Verzeichnis spezifische Weiterleitung
Im folgenden soll die Vorschaltung des Apache HTTP Webserver vor den Apache Tomcat gezeigt werden:
Herunterladen
Um das mod_jk nutzen zu können muss dieses nach der Installation erste einmal heruntergeladen werden. Dies kann unter folgendem Link erfolgen. Die aktuelle stabile Version ist 1.2.31
Installieren
Ab hier werden root
-Rechte zur Ausführung der nachfolgenden Befehle benötigt. Um root
zu werden geben Sie bitte folgenden Befehl ein:
$ su - Password:
Nach dem erfolgreichen herunterladen der Datei mit z.B. dem Namen mod_jk-1.2.31-httpd-2.2.x.so
, sollte diese noch umbenannt werden und in das Verzeichnis /etc/httpd/modules
mit folgendem Befehl verschoben werden:
# mv /tmp/mod_jk-1.2.31-httpd-2.2.x.so /etc/httpd/modules/mod_jk.so
Anschließend müssen noch ggf. die Besitzrechte mit nachfolgendem Befehl, wie folgt angepasst werden:
# chown root.root /etc/httpd/modules/mod_jk.so
Abschließend müssen ebenfalls noch ggf. die Dateirechte mit nachfolgendem Befehl, wie folgt angepasst werden:
# chmod 755 /etc/httpd/modules/mod_jk.so
Folgende Modifikationen sind an der Konfigurationsdatei /etc/httpd/conf.d/mod_jk.conf
durchzuführen:
Schritt 1
Laden des Modules:
LoadModule jk_module modules/mod_jk.so
Schritt 2
Konfiguration des Modules:
<IfModule mod_jk.c> # Apache httpd and Apache Tomcat Connector Configuration. # JkRequestLogFormat: %r %q - not used, because form-field e.g. password # are shown. # JkShmSize size can now be determined automatically # JkShmSize 64k JkShmFile "/var/cache/tomcat6/temp/mod_jk.shm" JkLogFile "/var/log/httpd/mod_jk.log" JkLogLevel error JkLogStampFormat "[%a, %d.%m.%Y %H:%M:%S] " JkRequestLogFormat "%w %R %V %v %s %b %B %U %p %T %H %m" JkWorkerProperty workers.tomcat_home="/usr/share/tomcat6" JkWorkerProperty workers.java_home="/usr/lib/jvm/java" JkWorkerProperty worker.list=worker1 JkWorkerProperty worker.worker1.type=ajp13 JkWorkerProperty worker.worker1.host=127.0.0.1 JkWorkerProperty worker.worker1.port=8099 </IfModule>
* Dies ist nur eine Beispielkonfiguration. Die Bedeutung der einzelnen Befehle kann in der Dokumentation The Apache Tomcat Connector - Reference Guide detailliert nachgelesen werden
- JkShmSize 64k
nur erforderlich für balancer- und status.worker - Zusätzlicher Cache-Speicher auf der Festplatte (Shared Memeory)
- JkShmFile „/var/cache/tomcat6/temp/mod_jk.shm“
nur erforderlich für balancer- und status.worker - Datei für den zusätzlichen Cache-Speicher auf der Festplatte (Shared Memeory)
- JkLogFile „/var/log/httpd/mod_jk.log“
Log-Datei des Modules mod_jk
- JkLogLevel error
Loglevel der Log-Datei des Modules mod_jk - Standard ist info
- JkLogStampFormat „[%a, %d.%m.%Y %H:%M:%S] „
Format des verwendeten Zeitstempels - siehe auch The Apache Tomcat Connector - Reference Guide
- JkRequestLogFormat “%w %R %V %v %s %b %B %U %p %T %H %m“
Format des Log-Eintrags - siehe auch The Apache Tomcat Connector - Reference Guide
- JkWorkerProperty workers.tomcat_home=„/usr/share/tomcat6“
Heimatverzeichnis des Apache Tomcat
- JkWorkerProperty workers.java_home=„/usr/lib/jvm/java“
Heimatverzeichnis der installierten Java-Version.
- JkWorkerProperty worker.worker1.type=ajp13
Protokoll-Typ des AJP-Protokolls (1.2 oder 1.3 - wobei 1.3 zu verwenden ist!)
- JkWorkerProperty worker.worker1.host=127.0.0.1
IP-Adresse des Apache Tomcat-Servers
- JkWorkerProperty worker.worker1.port=8099
AJP-Port des Apache Tomcat-Servers agbeändert !!!
Schritt 3
Falls kein virtueller Host definiert ist, können folgende Konfigurationsangaben ebenfalls in der Datei /etc/httpd/conf/httpd.conf
definiert werden. Falls ein virtuellen Host definiert wurde, könnte dieser wie folgt aussehen:
# # tachtler.net # <VirtualHost *:80> ServerAdmin webmaster@tachtler.net ServerName tachtler.net ServerAlias www.tachtler.net ServerPath / DocumentRoot "/usr/share/tomcat6/webapps/ROOT" <Directory "/usr/share/tomcat6/webapps/ROOT"> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> JkMount /*.do worker1 JkMount /*.jsp worker1 DirectoryIndex index.htm ErrorLog logs/error.log CustomLog logs/access.log combined </VirtualHost>
WICHTIG sind hier die beiden Zeilen:
JkMount /*.jsp worker1 JkMount /*.do worker1
Die erste Zeile, weist den Apache HTTP Webserver alle angeforderten Seiten mit der Endung .jsp
an den Apache Tomcat zur Erstellung weiterzuleiten.
Die zweite Zeile, weist den Apache HTTP Webserver alle angeforderten Seiten mit der Endung .do
an den Apache Tomcat zur Erstellung weiterzuleiten. Die ist z.B. bei Nutzung des Apache Struts Frameworks der Fall.
Ein Neustart ist nun erforderlich!
Ein Neustart kann mit folgendem Befehl durchgeführt werden:
# service tomcat6 restart Stopping tomcat6: [ OK ] Starting tomcat6: [ OK ]
Beispiel
Falls Sie nun folgende einfache *.jsp-Datei in den hier angegebenen DocumentRoot „/usr/share/tomcat6/webapps/ROOT“
legen,
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>JSP-Testseite</title> </head> <body> <font style="font-family: arial; font-size: 0.8em"><%=new java.util.Date()%></font> </body> </html>
und diese wie folgt wie hier z.B. wie folgt aufrufen:
sollte das aktuelle Datum und die aktuelle Uhrzeit wie folgt dargestellt erscheinen
Mon Oct 27 16:56:34 CET 2011