In der heutigen Folge von ‚Probleme die die Welt nicht braucht‘ beschäftigen wir uns mit dem Verbinden von Apache2 und Tomcat5.5 mittels mod_jk auf einem Debian Etch. Weil wir penibel sind, wollen wir aber nur eine einzelne Subdomain auf den Tomcat legen, der Rest vom Schützenfest soll unberührt bleiben. Zur Krönung macht uns ein laufendes SysCP, das eigentlich alle Domains und damit auch Subdomains verwaltet noch einen Strich durch die Rechnung.
Zuerst sollte der wilde Haufen mal wie hier beschrieben installiert sein, und vor allem laufen.
Und los:
Zuerst bauen wir uns einen Worker in /etc/apache2/workers.properties:
# wir definieren den pfad zum tomcat und java homeverzeichnis
# sowie einen pfadseparierer
workers.tomcat_home=/var/lib/tomcat5.5
workers.java_home=/usr/lib/jvm/java-1.5.0-sun-1.5.0.14
ps=/
# name des/der worker, durch kommata getrennt
worker.list=arbeiter
# hier noch den port, auf dem der worker arbeitet, seine URL
# und das protokoll (ajp12 ist depricated und lb wäre für den loadbalancer)
worker.arbeiter.port=8009
worker.arbeiter.host=sub.domain.tld
worker.arbeiter.type=ajp13
Mehr zu Workern gibs hier
Wir schreiten zur Konfiguration der Tomcat server.xml.
Zuerst kommentiere man die Host-Direktive mit Namen localhost aus und füge folgende, an die eingenen Ansprüche angepasste ein:
unpackWARs=“true“ autoDeploy=“true“>
directory=“logs“ prefix=“project_name_access_log.“ suffix=“.txt“
pattern=“common“ resolveHosts=“false“/>
Man führe sich hierzu noch folgende Links zu Gemüte:
Engine Container
Host Container
Context Container
Ein Tomcat Reload sollte jetzt automatisch die /var/lib/tomcat5.5/conf/auto/mod_jk.conf erstellen. Das tut er aber nur, wenn der Apache gestoppt ist; Also:
# /etc/init.d/apache2 stop
# /etc/init.d/tomcat5.5 restart
# /etc/init.d/apache2 start
mod_jk.conf wurde brav automatisch erstellt.
Wenn wir diese in apache2.conf includen sollte der Apache beim starten motzen; Igendwas über
[Thu Jun 12 21:13:24 2008] [error] VirtualHost sub.domain.tld:0 — mixing * ports and non-* ports with a NameVirtualHost address is not supported, proceeding with undefined results
Problem 1 mit den
# rm -dr /var/lib/tomcat5.5/conf/auto
# vi /etc/apache2/sites-enabled/mod_jk.conf
LoadModule jk_module „/usr/lib/apache2/modules/mod_jk.so“
JkWorkersFile „/etc/apache2/workers.properties“
JkLogFile „/usr/share/tomcat5.5/logs/mod_jk.log“
JkLogLevel debug
ServerName sub.domain.tld
ServerAlias www.sub.domain.tld
ServerAdmin admin@nimda.com
DocumentRoot „/var/lib/tomcat5.5/webapps“
JkMount / arbeiter
JkMount /* arbeiter
Sollte generell selbsterklärend sein, allerdings sollte man bei den JkMounts beachten, den Worker beim Namen zu nennen und nicht nur auf das Protokoll zu verweisen.
Interessanter Lesestoff hierzu: Webserver Howto und zugehörige Reference
# apache2ctl configtest
Syntax OK
# /etc/init.d/apache2 restart
Geschafft 😉
Bonustipp:
SEVERE: Caught exception executing
org.apache.tomcat.util.net.TcpWorkerThread@1e4eb5b, terminating thread
org.apache.commons.logging.LogConfigurationException:
org.apache.commons.logging.LogConfigurationException:
org.apache.commons.logging.LogConfigurationException: Class org.apache.commons.logging.impl.Log4JCategoryLog does not implement Log
at org.apache.commons.logging.impl.LogFactoryImpl.newInstance (LogFactoryImpl.java:555)
…
Sollte der Tomcat beim hochfahren mehrere Hände voll solcher SEVERE Errors ins Logfile schießen, hilft es auf die Jakarta/Apache Commons Logging im /WEB-INF/lib der Java-Webprojekte zu verzichten …