Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:apache_http_server_archlinux_-_mod_jk_-_apache_tomcat_kommunikation

Apache HTTP Server Archlinux - mod_jk - Apache Tomcat Kommunikation

Der Apache HTTP Server ist ein Open Source Webserver und der seit 1996 am meisten im Internet eingesetzte Webserver weltweit. Der freie und quell offenen Webserver wird von der Apache Software Foundation zur Verfügung gestellt und weiterentwickelt.

Um den Apache HTTP Server als z.B. Frontend-Server vor eines Apache Tomcat Server zu betreiben, kann als Kommunikationsprotokoll das AJP/1.3-Protokoll zum Einsatz kommen.

Hierbei gibt es zwei Module, die die Kommunikation zwischen dem Apache HTTP Server und dem Apache Tomcat Server über das AJP/1.3-Protokoll bewerkstelligen können:

  1. mod_jk - Federführung bei der Entwicklung Apache Tomcat Server
  2. mod_proxy_ajp - Federführung bei der Entwicklung Apache HTTP Server

Nachfolgend soll der Einsatz des Moduls - mod_jk beschrieben werden.

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: 

Vorbereitung

Zur Installation von The Apache Tomcat Connectors: mod_jk als AUR-Paket, müssen nachfolgende Vorbereitungen durchgeführt werden:

Die Einbindung des AUR-Repositories, kann wie in nachfolgenden internen Link beschrieben

durchgeführt werden.

Installation: mod_jk

Nachdem das AUR-Repository von ArchLinux - AUR

erfolgreich eingebunden wurde, kann mit nachfolgendem Befehl, das AUR-Paket - mod_jk installiert werden:

# pikaur --noconfirm -S mod_jk

Installationsverlauf

Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket mod_jk installiert wurden:

# pikaur -Qil mod_jk

Installierte Dateien

Konfiguration: Apache HTTPD Webserver

/etc/httpd/conf/httpd.conf

Die Konfigurationsdatei /etc/httpd/conf/httpd.conf beinhaltet die Aktivierung der Module des Apache HTTP Server.

:!: HINWEIS - Die nachfolgenden Anpassungen ist individuell und vom jeweiligen Einsatzzweck abhängig und ggf. den persönlichen Bedürfnissen anzupassen!

Die Anpassungen werden mit einem vorangestellten Kommentar in der Form

# Tachtler

gekennzeichnet.

(Nur relevanter Ausschnitt)

# Tachtler
LoadModule jk_module modules/mod_jk.so
<IfModule jk_module>
Include conf/extra/mod_jk.conf
</IfModule>

/etc/httpd/conf/extra/mod_jk.conf

Nachfolgende Konfigurationsdatei in nachfolgendem Verzeichnis mit nachfolgendem Namen

  • /etc/httpd/conf/extra/mod_jk.conf

soll mit nachfolgendem Befehl neu angelegt werden und die Konfiguration des Moduls mod_jk beinhalten:

# touch /etc/httpd/conf/extra/mod_jk.conf

Anschließend sollte nachfolgender Inhalt in die Konfigurationsdatei - /etc/httpd/conf/extra/mod_jk.conf - eingefügt werden:

# 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
<IfModule jk_module>
    JkShmFile "/var/run/httpd/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/tomcat9"
    JkWorkerProperty workers.java_home="/usr/lib/jvm/default/bin"
 
    JkWorkerProperty worker.list=worker1,jkstatus
    JkWorkerProperty worker.jkstatus.type=status
 
    JkWorkerProperty worker.worker1.type=ajp13
    JkWorkerProperty worker.worker1.host=127.0.0.1
    JkWorkerProperty worker.worker1.port=8099
</IfModule>

* Dies ist nur eine Beispielkonfiguration.

:!: HINWEIS - Die Bedeutung der einzelnen Befehle kann in der Dokumentation

detailliert nachgelesen werden.

Erklärungen:

JkShmSize 64k

:!: nur erforderlich für balancer- und status.worker - Zusätzlicher Cache-Speicher auf der Festplatte (Shared Memeory)

JkShmFile "/var/run/httpd/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/tomcat9"

Heimatverzeichnis des Apache Tomcat

JkWorkerProperty workers.java_home="/usr/lib/jvm/default/bin"

Heimatverzeichnis der installierten Java-Version.

JkWorkerProperty worker.list=worker1,jkstatus

Definition der liste der worker.

JkWorkerProperty worker.jkstatus.type=status

Definition des besonderen workers status, über dessen Aufruf in einer URL eine Status-Anzeige erfolgt.

JkWorkerProperty worker.worker1.type=ajp13

Protokoll-Typ des AJP-Protokolls

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 :!: abgeändert !!!

/etc/httpd/conf/vhost/tomcat.conf

Falls kein virtueller Host definiert ist, können folgende Konfigurationsangaben ebenfalls in der Datei /etc/httpd/conf/httpd.conf definiert werden.

Nachfolgend ein Beispiel für einen virtuellen Host:

#
# tomcat.tachtler.net (Apache Tomcat Applications)
#
<VirtualHost *:80>
        ServerAdmin webmaster@tachtler.net
        ServerName tomcat.tachtler.net
        ServerAlias www.tomcat.tachtler.net
        ServerPath /
 
        DocumentRoot "/var/lib/tomcat9/webapps/ROOT"
        <Directory "/var/lib/tomcat9/webapps/ROOT">
                Options -Indexes +FollowSymLinks
                AllowOverride None
                Require all granted
        </Directory>
 
        # Protect META-INF-Directory
        <Directory "/var/lib/tomcat9/webapps/ROOT/META-INF">
                AllowOverride None
                Require all denied
        </Directory>
 
        # Protect WEB-INF-Directory
        <Directory "/var/lib/tomcat9/webapps/ROOT/WEB-INF">
                AllowOverride None
                Require all denied
        </Directory>
 
        <IfModule jk_module>
            JkMount /*.action worker1
            JkMount /*.jsp worker1
        </IfModule>
 
        DirectoryIndex index.htm index.jsp
 
        ErrorLog logs/tomcat_error.log
        SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded
        CustomLog logs/tomcat_access.log combined env=!forwarded
        CustomLog logs/tomcat_access.log combined_proxypass env=forwarded
</VirtualHost>

* Dies ist nur eine Beispielkonfiguration.

Die Bedeutung der einzelnen Befehle kann in der Dokumentation Apache Module mod_proxy detailliert nachgelesen werden.

Konfiguration: JkMount

Einfachste Variante: Alles weiterleiten

            JkMount /* worker1

Die Zeile, weist den Apache HTTP Webserver alle angeforderten Seiten und deren Inhalt (Bilder, CSS-Dateien usw.) an den Apache Tomcat zur Erstellung weiterzuleiten.

Manuelle Variante: Vereinzelt weiterleiten - manueller Eingriff

            JkMount /*.action worker1
            JkMount /*.jsp worker1

Die erste Zeile, weist den Apache HTTP Webserver alle angeforderten Seiten mit der Endung .action an den Apache Tomcat zur Erstellung weiterzuleiten. Die ist z.B. bei Nutzung des Apache Struts Frameworks der Fall.

Die zweite Zeile, weist den Apache HTTP Webserver alle angeforderten Seiten mit der Endung .jsp an den Apache Tomcat zur Erstellung weiterzuleiten.

:!: HINWEIS - Alle Seiteninhalte wie z.B. Bilder, CSS_Dateien usw.) werden NICHT an den Apache Tomcat zur Erstellung weitergeleitet, sondern durch den Apache HTTP Webserver ausgeliefert!

:!: ACHTUNG - Diese Variante erfordert, das der Apache HTTP Webserver Dateisystem-Zugriff auf das Verzeichnis /var/lib/tomcat9/webapps/ROOT hat !!!

Um den Apache HTTP Webserver lesenden Zugriff auf eventuelle Verzeichnisse und Dateien innerhalb des Verzeichnisses /var/lib/tomcat9/webapps/ROOT zu verschaffen, können nachfolgende beiden Befehle verwendet werden:

Zugriff auf Unterverzeichnisse innerhalb von /var/lib/tomcat9/webapps/ROOT für den Apache HTTP Webserver:

# find /var/lib/tomcat9/webapps/ROOT -type d -exec chmod 755 {} \;

Zugriff auf Dateien innerhalb von /var/lib/tomcat9/webapps/ROOT für den Apache HTTP Webserver:

# find /var/lib/tomcat9/webapps/ROOT -type f -exec chmod 644 {} \;

Beste Variante: Vereinzelt weiterleiten - jsvc umask anpassen

            JkMount /*.action worker1
            JkMount /*.jsp worker1

Die erste Zeile, weist den Apache HTTP Webserver alle angeforderten Seiten mit der Endung .action an den Apache Tomcat zur Erstellung weiterzuleiten. Die ist z.B. bei Nutzung des Apache Struts Frameworks der Fall.

Die zweite Zeile, weist den Apache HTTP Webserver alle angeforderten Seiten mit der Endung .jsp an den Apache Tomcat zur Erstellung weiterzuleiten.

:!: HINWEIS - Alle Seiteninhalte wie z.B. Bilder, CSS_Dateien usw.) werden NICHT an den Apache Tomcat zur Erstellung weitergeleitet, sondern durch den Apache HTTP Webserver ausgeliefert!

:!: ACHTUNG - Diese Variante erfordert, das der Apache HTTP Webserver Dateisystem-Zugriff auf das Verzeichnis /var/lib/tomcat9/webapps/ROOT hat !!!

Damit beim entpacken eines z.B. eigenen ROOT.war im Verzeichnis /var/lib/tomcat9/webapps antsprechend gesetzte werden, ist nachfolgende Anpassung des systemd tomcat9.service erforderlich:

  • /etc/systemd/system/tomcat9.service.d/override.conf

Nachfolgend sollen einige Änderungen bzw. Ergänzungen an dieser Konfigurationsdatei durchgeführt werden, welchen ein Kommentar, wie nachfolgend dargestellt, voransteht:

# Tachtler

Die Änderungen an der Konfigurationsdatei tomcat9.service können mit nachfolgendem Befehl bequem editiert werden:

# systemctl edit tomcat9.service
### Editing /etc/systemd/system/tomcat9.service.d/override.conf
### Anything between here and the comment below will become the contents of the drop-in file
 
[Service]
Environment=CATALINA_OPTS="-server -Xms512m -Xmx1024m"
ExecStart=
ExecStart=/usr/bin/jsvc \
            -Dcatalina.home=${CATALINA_HOME} \
            -Dcatalina.base=${CATALINA_BASE} \
            -Djava.io.tmpdir=/var/tmp/tomcat9/temp \
            -cp /usr/share/java/commons-daemon.jar:/usr/share/java/eclipse-ecj.jar:${CATALINA_HOME}/bin/bootstrap.jar:${CATALINA_HOME}/bin/tomcat-juli.jar \
            -umask 0022 \
            -user tomcat9 \
            -java-home ${TOMCAT_JAVA_HOME} \
            -pidfile /var/run/tomcat9.pid \
            -errfile ${ERRFILE} \
            -outfile ${OUTFILE} \
            $CATALINA_OPTS \
            org.apache.catalina.startup.Bootstrap                                                               
 
### Edits below this comment will be discarded
 
 
### /usr/lib/systemd/system/tomcat9.service
# [Unit]
# Description=Tomcat 9 servlet container
# After=network.target
# 
# [Service]
# Type=forking
# PIDFile=/var/run/tomcat9.pid
# Environment=CATALINA_PID=/var/run/tomcat9.pid
# Environment=TOMCAT_JAVA_HOME=/usr/lib/jvm/default-runtime
# Environment=CATALINA_HOME=/usr/share/tomcat9
# Environment=CATALINA_BASE=/usr/share/tomcat9
# Environment=CATALINA_OPTS=
# Environment=ERRFILE=SYSLOG
# Environment=OUTFILE=SYSLOG
# 
# ExecStart=/usr/bin/jsvc \
#             -Dcatalina.home=${CATALINA_HOME} \
#             -Dcatalina.base=${CATALINA_BASE} \
#             -Djava.io.tmpdir=/var/tmp/tomcat9/temp \
#             -cp /usr/share/java/commons-daemon.jar:/usr/share/java/eclipse-ecj.jar:${CATALINA_HOME}/bin/bootstrap.  jar:${CATALINA_HOME}/bin/tomcat-juli.jar \
#             -user tomcat9 \
#             -java-home ${TOMCAT_JAVA_HOME} \
#             -pidfile /var/run/tomcat9.pid \
#             -errfile ${ERRFILE} \
#             -outfile ${OUTFILE} \
#             $CATALINA_OPTS \
#             org.apache.catalina.startup.Bootstrap
# 
# ExecStop=/usr/bin/jsvc \
#             -pidfile /var/run/tomcat9.pid \
#             -stop \
#             org.apache.catalina.startup.Bootstrap
# 
# [Install]
# WantedBy=multi-user.target

Hier die komplette Konfigurationsdatei

  • /etc/systemd/system/tomcat9.service.d/override.conf

mit allen Änderungen bzw. Ergänzungen, welche ebenfalls nachfolgend erklärt werden:

# cat /etc/systemd/system/tomcat9.service.d/override.conf
[Service]
Environment=CATALINA_OPTS="-server -Xms512m -Xmx1024m"
ExecStart=
ExecStart=/usr/bin/jsvc \
            -Dcatalina.home=${CATALINA_HOME} \
            -Dcatalina.base=${CATALINA_BASE} \
            -Djava.io.tmpdir=/var/tmp/tomcat9/temp \
            -cp /usr/share/java/commons-daemon.jar:/usr/share/java/eclipse-ecj.jar:${CATALINA_HOME}/bin/bootstrap.jar:${CATALINA_HOME}/bin/tomcat-juli.jar \
            -umask 0022 \
            -user tomcat9 \
            -java-home ${TOMCAT_JAVA_HOME} \
            -pidfile /var/run/tomcat9.pid \
            -errfile ${ERRFILE} \
            -outfile ${OUTFILE} \
            $CATALINA_OPTS \
            org.apache.catalina.startup.Bootstrap

:!: WICHTIG - Mit der ersten Direktive ExecStart= werden die in der Originaldatei gesetzten Parameter geleert!

:!: WICHTIG - Mit der zweiten Direktive ExecStart=/usr/bin/jsvc \… usw. wird der Bereich komplett neu gesetzt!

:!: ACHTUNG - Die Ergänzung -umask 0022 \ ist hier hinzugekommen!

Anschliessend können mit nachfolgendem Befehl die Änderungen übernommen werden:

# systemctl daemon-reload

Beispiel

Nachfolgender Aufruf zeigt die Apache Tomcat Standard ROOT-Anwendung aufgerufen über den Apache HTTP Webserver und zur Ausführung weitergeleitet an den Apache Tomcat:

http://tomcat.tachtler.net

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
tachtler/apache_http_server_archlinux_-_mod_jk_-_apache_tomcat_kommunikation.txt · Zuletzt geändert: 2023/09/09 08:11 von klaus