Zuletzt bearbeitet vor 3 Wochen
von Andre Knieschewski

Kernmodul Tomcat-Einrichtung: Unterschied zwischen den Versionen

Keine Bearbeitungszusammenfassung
Markierung: 2017-Quelltext-Bearbeitung
 
(47 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 3: Zeile 3:
Tomcat
Tomcat


Für das SuperX-Kernmodul 6.0 empfehlen wir '''Tomcat 10.1''' mit '''Java 21'''. Die folgenden Beispiele beziehen sich überwiegend auf Ubuntu Linux 26.04. Bei anderen Linux-Distributionen sind die Konfigurationsschritte weitgehend identisch, die Paketnamen und Pfade können aber abweichen.
{{Achtung|Der Umstieg von Tomcat 9 auf Tomcat 10 ist kein reines Versionsupdate. Die Java-EE-Schnittstellen wurden von <code>javax.*</code> nach <code>jakarta.*</code> umgestellt. Für Tomcat 10 wird eine dafür geeignete SuperX-Webanwendung benötigt. Weitere Hinweise dazu stehen im Abschnitt [[#Wechsel_von_Tomcat_9_auf_Tomcat_10|Wechsel von Tomcat 9 auf Tomcat 10]].}}


=Tomcat aus Linux Distributionen=
=Tomcat aus Linux Distributionen=
Da die Versionsnummern des Tomcat nicht immer zu SuperX passen, ist es ggf. sinnvoll einen eigenen Tomcat bzw. den im SuperX Kernmodul mitgelieferten Tomcat zu nutzen. Auch wenn Sie mehrere Tomcats auf einem Server betreiben kann es sinnvoll sein, Tomcat [[Kernmodul_Tomcat-Einrichtung#Tomcat_manuell_installieren|manuell]] zu installieren.  
Da die Versionsnummern des Tomcat nicht immer zu SuperX passen, können Sie einen eigenen Tomcat bzw. den im SuperX-Kernmodul mitgelieferten Tomcat nutzen. Auch wenn Sie mehrere Tomcats auf einem Server betreiben, kann es sinnvoll sein, Tomcat [[Kernmodul_Tomcat-Einrichtung#Tomcat_manuell_installieren|manuell]] zu installieren.
Der Betrieb von Tomcat aus der jeweiligen Linux-Distribution hat jedoch den Vorteil, dass man
* benötigte Drittsoftware direkt mitinstallieren kann
* die Apache-Integration einfacher einrichten kann
* regelmäßige Sicherheitsupdates und Bugfixes über die Paketverwaltung beziehen kann
* Tomcat in der Regel bereits als systemd-Dienst erhält
Wenn eine für SuperX geeignete Tomcat-Version in der Distribution enthalten ist, empfehlen wir daher die Installation aus der Distribution.


Der Betrieb von Tomcat aus der jew. Linux Distribution hat jedoch den Vorteil, dass man
* benötigte Drittsoftware direkt mitinstallieren kann
* die Apache Integration erfahrungsgemäß einfacher ist
* Regelmäßige Bugfixes automatisch beziehen kann
* Tomcat wird i.d.R.automatisch für systemd als Dienst konfiguriert, mit einer speziellen Kennung für den Systemuser.
Wir empfehlen daher die Distribution.
==Tomcat aus der Ubuntu-Distribution==
==Tomcat aus der Ubuntu-Distribution==
Im folgenden wird das Vorgehen für Ubuntu Linux beschrieben. Hier wird das Kernmodul 4.9 mit Tomcat9 unter Ubuntu 20.04 eingerichtet.
Im Folgenden wird das Vorgehen für Ubuntu Linux 26.04 mit Java 21 und Tomcat 10.1 beschrieben.
Zunächst wechseln sie in die root-Shell mit
Zunächst wechseln Sie in die root-Shell mit
  sudo -i
  sudo -i
* Java 1.8 und Tomcat9 installieren:
Java 21, Tomcat 10 und den Apache-Webserver installieren:
  apt-get install openjdk-8-jdk tomcat9
apt-get update
und direkt stoppen mit
  apt-get install -y openjdk-21-jdk tomcat10 apache2
  systemctl stop tomcat9.service
Tomcat anschließend zunächst stoppen:
Zur Sicherheit alte kompilierte Klassen löschen:
  systemctl stop tomcat10.service
rm -r /var/lib/tomcat9/work/*
Die installierten Versionen können Sie prüfen mit
* Dann die superx-webapp kopieren nach /var/lib/tomcat9/webapps, und den user tomcat zum Eigentümer machen:
java -version
chown -R tomcat:tomcat /var/lib/tomcat9/webapps/
/usr/share/tomcat10/bin/version.sh
{{Hinweis|Das Ubuntu-Paket <code>tomcat10</code> enthält Tomcat 10.1. Die tatsächlich ausgelieferte Patchversion hängt vom Paketstand ab. Die hier empfohlene Kombination mit Java 21 ist eine SuperX-Empfehlung; Tomcat 10.1 selbst benötigt mindestens Java 11.}}


{{Hinweis|Flexible Verzeichniswahl}}
Die Konfiguration des Distributions-Tomcat liegt üblicherweise in
Sie können das Verzeichnis der Webanwendung/en auch verschieben, indem sie in der Datei
/etc/tomcat10/server.xml
/etc/tomcat9/server.xml beim Element '''host''' das Attribut ''appBase" anpassen. Die Auslieferung ist
und die Webanwendungen in
<Host name="localhost"  appBase="webapps"
/var/lib/tomcat10/webapps
            unpackWARs="true" autoDeploy="false">
Kopieren Sie die zu Tomcat 10 passende SuperX-Webanwendung in das webapps-Verzeichnis. Der Tomcat-Dienstbenutzer muss auf die benötigten Dateien zugreifen können; die Eigentümer- und Schreibrechte sollten auf die tatsächlich erforderlichen Verzeichnisse begrenzt werden.
stattdessen könnten Sie z.B. schreiben
Beim HTTP-Connector in der <code>server.xml</code> setzen Sie die Zeichenkodierung auf UTF-8. Wenn Apache und Tomcat auf demselben Server laufen, empfehlen wir außerdem die Bindung an localhost:
<Host name="localhost" appBase="/opt/superx/webapps"
<source lang="xml">
            unpackWARs="true" autoDeploy="false">
<Connector port="8080" protocol="HTTP/1.1"
          address="127.0.0.1"
          connectionTimeout="20000"
          URIEncoding="UTF-8" />
</source>
Die weiteren Einstellungen für den Betrieb hinter Apache werden unter [[#Apache_Anbindung|Apache Anbindung]] erläutert. Weitere Details zur <code>server.xml</code> siehe [[Kern_Installation_Upgrade#Steuerung_des_Servers%3A_Die_server.xml|SuperX-Installationshandbuch]].


In der Datei
Unter Ubuntu können Java-Optionen üblicherweise in der Datei
/etc/tomcat9/server.xml
/etc/default/tomcat10
beim jew. Connector port="...." das Attribut
hinterlegt werden, z.B.:
URIEncoding="UTF-8"
  JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
ergänzen, also z.B.
    <Connector port="8080" protocol="HTTP/1.1"
              connectionTimeout="20000"
              redirectPort="8443"  URIEncoding="UTF-8" />
Dann in der /etc/default/tomcat die Zeilen
  JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
  JAVA_OPTS="-Djava.awt.headless=true -DSuperX-DB-PROPERTIES-SET=true -Xmx3700M"
  JAVA_OPTS="-Djava.awt.headless=true -DSuperX-DB-PROPERTIES-SET=true -Xmx3700M"
eintragen (der letzte RAM Parameter ist nur ein Beispiel).
Der Speicherwert ist nur ein Beispiel. Prüfen Sie mit <code>systemctl cat tomcat10</code>, welche Konfigurationsdateien der installierte Dienst tatsächlich einliest. Die vom Paket bereitgestellte systemd-Service-Datei sollte nicht direkt bearbeitet werden; bei Bedarf verwenden Sie eine systemd-Override-Datei.
Starten Sie Tomcat mit
systemctl start tomcat10.service
und prüfen Sie den Status mit
systemctl status tomcat10.service
Wenn der HTTP-Connector nur an <code>127.0.0.1</code> gebunden ist, kann der Zugriff auf demselben Server getestet werden mit
curl -I http://127.0.0.1:8080/superx/
Für den Aufruf vom Arbeitsplatzrechner wird anschließend die Apache-Anbindung eingerichtet.


Dann in der Datei
==Tomcat unter anderen Linux-Distributionen==
/usr/lib/systemd/system/tomcat9.service
Auch unter SUSE Linux und Red Hat Enterprise Linux können Sie den Tomcat aus der Distribution oder [[#Tomcat_manuell_installieren|manuell]] installieren. Die genauen Paketnamen, Dienstnamen und Verzeichnisse sind distributionsabhängig. Entscheidend sind eine geeignete Tomcat-10.1-Version, Java 21, eine kompatible SuperX-Webanwendung und die Konfiguration des HTTP-Connectors bzw. AJP-Connectors.
die Zeile
Ältere Verfahren mit <code>rctomcat</code>, <code>chkconfig</code> oder <code>SuSEconfig</code> werden hier nicht mehr beschrieben. Für die Dienstverwaltung wird systemd verwendet.
EnvironmentFile=/etc/default/tomcat9
ergänzen
Dann führen Sie aus:
systemctl daemon-reload
und starten Tomcat mit:
systemctl start tomcat9.service
Danach können Sie den Zugriff im Browser testen, beim Port 8080 z.B.


http://localhost:8080/superx/
==Tomcat aus der Distribution mit abweichender Userkennung oder anderem webapps-Verzeichnis==
Wenn Sie Tomcat aus der Distribution nutzen, läuft der Dienst unter einer dafür eingerichteten Systemkennung. Bei Ubuntu liegt das webapps-Verzeichnis üblicherweise unter <code>/var/lib/tomcat10/webapps</code>.
{{Hinweis|Standardmäßig hat der Tomcat-Dienstbenutzer keine Login-Shell. Dies sollte aus Sicherheitsgründen so bleiben.}}
Sie können das Verzeichnis der Webanwendungen auch ändern, indem Sie in der Datei <code>/etc/tomcat10/server.xml</code> beim Element <code>Host</code> das Attribut <code>appBase</code> anpassen, z.B.:
<source lang="xml">
<Host name="localhost" appBase="/home/superx/webserver/tomcat/webapps"
      unpackWARs="true" autoDeploy="false">
</source>
Beachten Sie, dass der Tomcat-Dienstbenutzer Lese- und Ausführungsrechte auf den gesamten benötigten Verzeichnispfad benötigt. Schreibrechte sollten nur für tatsächlich beschreibbare Verzeichnisse vergeben werden, etwa für temporäre Dateien oder SuperX-Logdateien. Auf gemeinsam verwendeten Verzeichnissen kann die Gruppenberechtigung entsprechend angepasst werden.
Wenn Sie als User <code>superx</code> neue Dateien anlegen und eine gemeinsam verwendete Gruppe eingerichtet haben, kann eine passende umask helfen:
# Full access to user and group, none for others:
umask u=rwx,g=rwx,o=
Die konkrete Gruppenkennung und die Eigentümerschaft richten sich nach der Installation. Beachten Sie auch die Hinweise für [[#Tomcat_und_Kettle|Tomcat und Kettle]].


==Tomcat unter SuSE Linux==
==Tomcat und Kettle==
Sie installieren Tomcat aus der Distribution mit
Im Homeverzeichnis des Benutzers, unter dem Tomcat läuft, sollte das Verzeichnis <code>.kettle</code> mit der Datei <code>kettle.properties</code> angelegt werden. Die Datei kann zunächst leer sein. Ermitteln Sie zuerst das Homeverzeichnis des Tomcat-Benutzers, z.B. mit
zypper -n in -l tomcat
getent passwd tomcat
Bei Suse Linux wird der interne Tomcat unter /usr/share/java/tomcat installiert, die Konfiguration liegt in /etc/tomcat
Liegt dieses bei Ubuntu unter <code>/var/lib/tomcat10</code>, können Sie als root Folgendes ausführen:
Wenn Sie diesen Tomcat nutzen möchten, sollten Sie die komplette SuperX Installation unter dem Tomcat Benutzer welcher von Suse angelegt wurde (tomcat) durchführen.
install -d -o tomcat -g tomcat /var/lib/tomcat10/.kettle
Zuerst muss der Tomcatuser Shell-Rechte bekommen. Dazu editieren Sie als root die /etc/passwd und geben in der Zeile vom Tomcatuser am Ende /bin/bash ein.  
touch /var/lib/tomcat10/.kettle/kettle.properties
Danach können Sie ggf. das Verzeichnis /usr/share/tomcat/superx anlegen und dort die Dateien des alten $SUPERX_DIR hinkopieren. Dementsprechend auch in der SQL_ENV das $SUPERX_DIR auf /usr/share/tomcat/superx setzen. Die Dateirechte müssen dem Tomcatuser zugeteilt werden.
  chown tomcat:tomcat /var/lib/tomcat10/.kettle/kettle.properties
Es ist auch sinnvoll für den Tomcatuser die Dateien wie .bashrc und .profile und Ordner .ssh anzulegen und rechte auf tomcat:tomcat zu geben. Damit können Sie dann aliases wie ll vergeben und auch bei login automatisch die SQL_ENV laden.
{{Hinweis|Bei einer Distributionsaktualisierung sollte geprüft werden, ob das Homeverzeichnis des Tomcat-Benutzers weiterhin korrekt gesetzt ist.}}
Jetzt melden Sie sich mit der TomcatKennung an.
Nun müssen wir die SuperX-Webanwendung in den Suse-Tomcat integrieren, d.h. der im Kernmodul mitgelieferte Tomcat wird gar nicht benutzt, aber den webapps-Ordner darin schon. Wenn SuperX nun unter /usr/share/tomcat/superx liegt, und das Kernmodul hier entpackt wird, liegt die Webanwendung in /usr/share/tomcat/superx/webserver/tomcat/webapps.  
Diesen Pfad tragen Sie in der /etc/tomcat/server.xml ein:
  <Host name="localhost"  appBase="/usr/share/tomcat/superx/webserver/tomcat/webapps"
            unpackWARs="true" autoDeploy="true">
Weiter oben setzen Sie bei Betrieb in UTF-8 noch das  URIEncoding="UTF-8":
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"  URIEncoding="UTF-8" />
und ggf. auch
<Connector port="8080" protocol="HTTP/1.1"
              connectionTimeout="20000"
              redirectPort="8443"
  URIEncoding="UTF-8" />


Damit ist der UbuntuTomcat in SuperX integriert.
=Tomcat manuell installieren=
Beispiel-Befehle für Tomcat:
Sie können auch spezielle Versionen von [https://tomcat.apache.org Tomcat] herunterladen und installieren. Oder Sie verwenden den im SuperX-Kernmodul mitgelieferten Tomcat. Speicherort ist z.B. <code>/home/superx/webserver/tomcat</code>.
Starten:
Bei einer Neuinstallation bzw. einem Versionswechsel sollten Sie die Konfiguration der neuen Tomcat-Version als Ausgangspunkt verwenden. Kopieren Sie nicht einfach die kompletten alten Verzeichnisse <code>bin</code>, <code>lib</code> und <code>conf</code> darüber. Auch bisher benötigte Zusatzbibliotheken und Java-Optionen müssen auf Kompatibilität geprüft werden.
rctomcat start
Stoppen:
rctomcat stop
Neustarten:
rctomcat restart
Und die Logdateien liegen hier: /var/log/tomcat/*
Damit der Server beim Booten hochfährt, geben Sie ein:
chkconfig --set tomcat on


Variablen wie CATALINA_OPTS setzen Sie hier: /etc/tomcat/tomcat.conf
z.B.
CATALINA_OPTS="-DSuperX-DB-PROPERTIES-SET=true -Xmx4700M -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false "
=Tomcat manuell installieren=
Sie können auch spezielle Versionen von [https://tomcat.apache.org Tomcat] herunterladen und installieren. Oder sie laden das SuperX-Kernmodul Paket herunter, da ist ein aktueller Tomcat bereits enthalten. Speicherort wäre z.B. in /home/superx/webserver/tomcat.
==Tomcat als Dienst==
==Tomcat als Dienst==
Damit Tomcat bei Systemstart automatisch hochfährt, und beim Herunterfahren kontrolliert gestoppt wird, muss man einen Dienst anlegen.  
Damit Tomcat beim Systemstart automatisch hochfährt und beim Herunterfahren kontrolliert gestoppt wird, kann man einen systemd-Dienst anlegen. Im Beispiel liegt SuperX unter <code>/home/superx</code> und Tomcat wird vom Benutzer <code>superx</code> gestartet. Für eine Installation aus der Linux-Distribution ist der Dienst in der Regel bereits vorhanden.
In modernen Linuxen geht das mit dem Tool "systemd", was wiederum kontrolliert wird durch den Kommandozeilen Befehl "systemctl".


Damit dieser als Dienst läuft, muss man Linux wie folgt konfigurieren: Nehmen wir als Beispiel, dass das Kernmodul unter /home/superx liegt und Tomcat vom User superx gestartet wird.
===Service-Scripte===
===Service-Scripte===
Zunächst legen wir als User superx im Verzeichnis tomcat/bin zwei Dateien an:
Zunächst legen wir als User <code>superx</code> im Verzeichnis <code>tomcat/bin</code> zwei Dateien an.
 
<code>startup_service.x</code>:
startup_service.x
  #!/bin/bash
  #
  # Startup script for Apache Tomcat with systemd
  # Startup script for Apache Tomcat with systemd
#
  set -e
  set -e
  # Load the service settings
  # Load the service settings
  . /home/superx/db/bin/SQL_ENV
  . /home/superx/db/bin/SQL_ENV
  CATALINA_BASE=/home/superx/webserver/tomcat
  export CATALINA_BASE=/home/superx/webserver/tomcat
  CATALINA_HOME=/home/superx/webserver/tomcat
  export CATALINA_HOME=/home/superx/webserver/tomcat
  CATALINA_TMPDIR=/home/superx/webserver/tomcat/temp
  export CATALINA_TMPDIR=/home/superx/webserver/tomcat/temp
  # Start Tomcat
  # Start Tomcat
  cd $CATALINA_BASE && exec $CATALINA_HOME/bin/catalina.sh run  
  cd "$CATALINA_BASE" && exec "$CATALINA_HOME/bin/catalina.sh" run
 
und <code>shutdown_service.x</code>:
und shutdown_service.x:
#!/bin/bash
  # Shutdown script for Apache Tomcat with systemd
  # Shutdown script for Apache Tomcat with systemd
#
  set -e
  set -e
  # Load the service settings
  # Load the service settings
  . /home/superx/db/bin/SQL_ENV
  . /home/superx/db/bin/SQL_ENV
  CATALINA_BASE=/home/superx/webserver/tomcat
  export CATALINA_BASE=/home/superx/webserver/tomcat
  CATALINA_HOME=/home/superx/webserver/tomcat
  export CATALINA_HOME=/home/superx/webserver/tomcat
  CATALINA_TMPDIR=/home/superx/webserver/tomcat/temp
  export CATALINA_TMPDIR=/home/superx/webserver/tomcat/temp
  # Stop Tomcat
  # Stop Tomcat
  cd $CATALINA_BASE && exec $CATALINA_HOME/bin/catalina.sh stop
  cd "$CATALINA_BASE" && exec "$CATALINA_HOME/bin/catalina.sh" stop
 
In der Datei <code>SQL_ENV</code> sollten die für Tomcat benötigten Umgebungsvariablen, insbesondere <code>JAVA_HOME</code> für Java 21 und die Java-Optionen, korrekt gesetzt bzw. exportiert werden. Der Pfad zu Java ist von der Distribution abhängig.
In der Datei SQL_ENV muss dann noch der Ordner /usr/bin in den PATH aufgenommen werden. Daher am besten am Anfang die Zeilen
PATH=$PATH:/usr/bin
export PATH
setzen. Außerdem muss im Kopf der SQL_ENV
#!/bin/bash
stehen, damit die Bash genommen wird.


===Dienst einrichten===
===Dienst einrichten===
Legen Sie als User root die Datei /etc/systemd/system/tomcat_superx.service an, mit dem Inhalt:
Legen Sie als User root die Datei <code>/etc/systemd/system/tomcat_superx.service</code> an, mit dem Inhalt:
  [Unit]
  [Unit]
  Description=Tomcat SuperX
  Description=Tomcat SuperX
After=syslog.target
  After=network.target
  After=network.target
After=postgresql.service
 
  [Service]
  [Service]
RestartSec=2s
  Type=simple
  Type=simple
  User=superx
  User=superx
Zeile 156: Zeile 130:
  ExecStart=/bin/bash /home/superx/webserver/tomcat/bin/startup_service.x
  ExecStart=/bin/bash /home/superx/webserver/tomcat/bin/startup_service.x
  ExecStop=/bin/bash /home/superx/webserver/tomcat/bin/shutdown_service.x
  ExecStop=/bin/bash /home/superx/webserver/tomcat/bin/shutdown_service.x
EnvironmentFile=/home/superx/db/bin/SQL_ENV
 
  [Install]
  [Install]
  WantedBy=multi-user.target
  WantedBy=multi-user.target
 
Die Gruppe <code>users</code> ist hier nur ein Beispiel und muss gegebenenfalls angepasst werden. Der Eintrag <code>EnvironmentFile=/home/superx/db/bin/SQL_ENV</code> wird nicht benötigt, da die Skripte die <code>SQL_ENV</code> bereits als Bash-Skript einlesen. systemd kann unter <code>EnvironmentFile</code> keine beliebigen Bash-Befehle ausführen.
Den Dienst aktivieren Sie dann mit  
Den Dienst aktivieren und starten Sie mit
systemctl daemon-reload
  systemctl enable tomcat_superx
  systemctl enable tomcat_superx
und starten ihn dann mit
  systemctl start tomcat_superx
  systemctl start tomcat_superx
Bei Problemen kann man die Fehlerausgabe anzeigen:
Den Status und die Logmeldungen können Sie prüfen mit
  journalctl -xe
systemctl status tomcat_superx
Wenn man die .service-Datei ändert, muss man die Dienste neu laden:
journalctl -u tomcat_superx -e
systemctl daemon-reload
Wenn Sie die Service-Datei ändern, müssen Sie danach <code>systemctl daemon-reload</code> ausführen. Den Dienst deaktivieren Sie mit
systemctl disable tomcat_superx
{{Achtung|Ein Fallstrick: Wenn die <code>SQL_ENV</code> komplexe Bash-Kommandos enthält oder für einen systemd-Dienst ungeeignete Einstellungen setzt, kann der Dienststart scheitern. In diesem Fall kann eine separate, vereinfachte <code>TOMCAT_ENV</code> sinnvoll sein, die von den Startskripten eingelesen wird.}}
Für mögliche SELinux-Probleme bei Shell-Skripten in systemd-Diensten siehe [[Kern_Installation_Upgrade#SELinux_(Security-Enhanced_Linux)|SELinux im SuperX-Installationshandbuch]].
 
=Tomcat Logging=
==Tomcat Logging mit systemd==
Je nach Installationsart erscheinen Tomcat-Meldungen im systemd-Journal oder in Dateien unter <code>$CATALINA_BASE/logs</code>. Bei einem manuell installierten Tomcat kann z.B. die Datei <code>catalina.out</code> vorhanden sein. Bei der Ubuntu-Distributionsinstallation sollte auch das systemd-Journal geprüft werden.
Alle Journalmeldungen anzeigen:
  journalctl
Die Meldungen eines bestimmten Tomcat-Dienstes anzeigen, z.B.:
journalctl -u tomcat10 -e
journalctl -u tomcat_superx -e
Die Meldungen live verfolgen:
journalctl -u tomcat10 -f
{{Hinweis|Ab SuperX 5.1 bzw. HISinOne-BI 2023.12 werden SuperX-spezifische Logmeldungen in der Datei <code>$CATALINA_BASE/logs/superx.log</code> ausgegeben. Je nach Fehlerbild sind sowohl diese Datei als auch die Tomcat-/systemd-Meldungen relevant.}}
 
=Apache Anbindung=
In Systemumgebungen, in denen bereits ein Webserver wie Apache läuft, bietet es sich an, den SuperX-Tomcat mit dem Webserver zu verbinden. Der Webserver kann so konfiguriert werden, dass Aufrufe zu <code>https://superx.example.de/superx/</code> an Tomcat weitergeleitet werden. Dadurch müssen die internen Tomcat-Ports nicht nach außen freigegeben werden. Die HTTPS-Verschlüsselung und die Zertifikatsverwaltung können vom Apache übernommen werden. Wir empfehlen daher generell die Anbindung von Tomcat an Apache für einen Produktivbetrieb.
Für die Verbindung zwischen Apache und Tomcat gibt es verschiedene Möglichkeiten:
* '''HTTP über Port 8080 mit ProxyPass (empfohlen)'''
* '''AJP über Port 8009 mit ProxyPass (Alternative)'''
* Mod-JK für bestehende Installationen
Wenn Apache und Tomcat auf demselben Server laufen, sollten die internen Connectoren nur an <code>127.0.0.1</code> gebunden werden. Bei getrennten Servern muss die Verbindung über ein vertrauenswürdiges und entsprechend geschütztes Netzwerk erfolgen.


Alle Dienste anzeigen können Sie mit
==ProxyPass über HTTP (Port 8080)==
  service --status-all
Wir empfehlen die HTTP-Anbindung über <code>mod_proxy</code> und <code>mod_proxy_http</code>. Sie ist einfach zu konfigurieren, verwendet das übliche HTTP-Protokoll und benötigt keinen AJP-Connector. AJP bietet zusätzliche Zugriffsmöglichkeiten auf Tomcat-interne Informationen und benötigt deshalb besondere Absicherung. HTTP über localhost ist damit bei gleicher Zugangsbeschränkung die einfacher zu betreibende Variante. Der interne HTTP-Verkehr ist dabei nicht verschlüsselt; dieses Beispiel gilt deshalb für Apache und Tomcat auf demselben Server.
Unter Ubuntu aktivieren Sie die benötigten Apache-Module mit
  a2enmod proxy proxy_http ssl


Den Dienst deaktivieren Sie mit  
===Tomcat konfigurieren===
systemctl disable tomcat_superx
In der <code>server.xml</code> (bei Ubuntu <code>/etc/tomcat10/server.xml</code>) richten Sie den HTTP-Connector ein:
<source lang="xml">
<Connector port="8080" protocol="HTTP/1.1"
          address="127.0.0.1"
          connectionTimeout="20000"
          URIEncoding="UTF-8"
          proxyName="superx.example.de"
          proxyPort="443"
          scheme="https"
          secure="true" />
</source>
Der Wert <code>proxyName</code> muss dem öffentlich verwendeten Hostnamen entsprechen. Die Angaben <code>proxyPort="443"</code>, <code>scheme="https"</code> und <code>secure="true"</code> teilen Tomcat mit, dass die Anwender die Webanwendung über HTTPS am Apache aufrufen. Diese Konfiguration ist für eine ausschließlich über HTTPS erreichbare SuperX-Anwendung mit einem festen öffentlichen Hostnamen gedacht.


{{Achtung|Ein Fallstrick: ein Dienst kann Probleme machen, wenn die SQL_ENV zu komplexe Bash-Kommandos enthält. In diesem Falle müssen Sie eine abgespeckte TOMCAT_ENV erstellen, die nur die Variablen zuweist.}}
===Apache konfigurieren===
Im Apache-VirtualHost für HTTPS (unter Ubuntu z.B. in <code>/etc/apache2/sites-available/superx.conf</code>) ergänzen Sie die Weiterleitung:
<source lang="apache">
<VirtualHost *:443>
    ServerName superx.example.de
    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/superx.crt
    SSLCertificateKeyFile /etc/ssl/private/superx.key
    ProxyRequests Off
    ProxyPass "/superx" "http://127.0.0.1:8080/superx"
    ProxyPassReverse "/superx" "http://127.0.0.1:8080/superx"
</VirtualHost>
</source>
Die Zertifikatspfade sind Beispiele. Bestehende VirtualHosts werden entsprechend ergänzt; die SSL-Konfiguration muss nicht doppelt angelegt werden. <code>ProxyPass</code> leitet die Anfragen an Tomcat weiter, <code>ProxyPassReverse</code> passt bestimmte vom Backend gelieferte HTTP-Weiterleitungen an. URLs, die eine Webanwendung direkt in HTML erzeugt, werden dadurch nicht automatisch korrigiert.
Nach den Änderungen prüfen Sie die Konfiguration und starten die Dienste neu:
apache2ctl configtest
systemctl restart tomcat10
systemctl reload apache2
Der Dienstname muss gegebenenfalls an die eigene Installation angepasst werden.


=Apache Anbindung=
===Falsche localhost-Adressen in DBForms bzw. HTML-Ausgaben===
In Systemumgebungen, in denen bereits ein Webserver wie Apache läuft, bietet es sich an, den SuperX-Tomcat mit dem Webserver zu verbinden. Der Webserver kann so konfiguriert werden, dass Aufrufe zu http://<<Servername>>/superx direkt an Tomcat weitergeleitet werden können. Dies hat auch den Vorteil, dass die ungewöhnlichen Ports von Tomcat (8080 bzw. 8443) nicht in der Firewall freigegeben werden müssen. Außerdem kann die Verschlüsselung vom Apache durchgeführt werden, und es kann ein Load-Balaning eingeführt werden (Lastausgleich zwischen 2 Tomcat-Servern, gesteuert vom Apache). Wir empfehlen daher generell die Anbindung von Tomcat an den Apache für einen Produktivbetrieb.
Wenn die öffentliche SuperX-Adresse über HTTPS aufgerufen wird, Tomcat intern aber nur den HTTP-Aufruf über <code>localhost:8080</code> erkennt, können Webanwendungen fehlerhafte absolute URLs erzeugen. Das kann z.B. bei DBForms zu einem solchen HTML-Eintrag führen:
Für die Anbindung gibt es zwei Apache-Module bzw. Möglichkeiten:
<source lang="html">
*ProxyPass
<base href="http://localhost:8080/superx/" />
*Mod-JK
</source>
==ProxyPass==
Der Browser des Anwenders versucht dann, Ressourcen von seinem eigenen Rechner (<code>localhost</code>) zu laden. Bilder, Skripte oder Verweise funktionieren deshalb gegebenenfalls nicht. Mit den oben beschriebenen Connector-Attributen <code>proxyName</code>, <code>proxyPort</code>, <code>scheme</code> und <code>secure</code> kann Tomcat den korrekten öffentlichen Servernamen und das HTTPS-Schema an die Webanwendung melden.
Unter Red Hat kann es mit der bisherigen empfohlenen Anbindungsmethode ‘mod_jk’ schwierigkeiten geben. Mit ProxPass hat es gut funktioniert und die Konfiguration war wesentlich einfacher.
{{Hinweis|Das Element <code>&lt;Host name="localhost"&gt;</code> in der Tomcat-<code>server.xml</code> bezeichnet einen virtuellen Tomcat-Host und muss dafür nicht in den öffentlichen DNS-Namen umbenannt werden. Entscheidend sind die für den Proxy verwendeten Connector-Einstellungen.}}
Das Modul ‘ProxyPass’ muss installiert und im Apache aktiviert / geladen werden. Danach muss in der Apache Konfiguration folgende Zeile für den AJP Konnector ergänzt werden :
Wenn mehrere öffentliche Hostnamen oder unterschiedliche Zugriffsschemata benötigt werden, reicht ein fest eingetragener <code>proxyName</code> gegebenenfalls nicht aus. Dann kann eine Konfiguration mit vertrauenswürdigen Proxy-Headern und der Tomcat-<code>RemoteIpValve</code> sinnvoll sein. Der Proxy muss solche Header kontrolliert setzen; unkontrolliert vom Client übernommene Header sind aus Sicherheitsgründen ungeeignet.
ProxyPass "/superx" "ajp://<<TOMCAT_IP>>:8009/superx"
Falls die Verbindung zu dem Tomcat über den Standard-Port laufen soll wird folgende Zeile benötigt:
ProxyPass "/superx" "https://<<TOMCAT_IP>>:8443/superx"
Das war schon alles. Eine Empfehlung können wir mangels fehlender Erfahrung noch nicht geben.
==Mod-JK==
Das Apache Modul '''mod_jk''' ist schon sehr lange im Einsatz und über die jew. Linux Distribution relativ leicht installierbar. Man kann es aber auch manuell installieren. "JK" steht übrigens für "Jakarta", das ist der ursprüngliche Name des Apache-Produkts für Java-basierte Webanwendungen, also gewissermaßen der Vorläufer von Tomcat. Im folgenden beschreiben wir die Installation, und danach die Einrichtung.
===Mod-JK unter Ubuntu Linux===
Bei Debian / Ubuntu wird das Paket installiert mit
apt-get install libapache2-mod-jk
Danach  muss man es noch aktivieren mit
a2enmod jk
Danach ist das Modul im Apache verfügbar.


===Mod-JK unter SuSE Linux===
==ProxyPass über AJP (Port 8009)==
Bei Suse wird das Paket installiert mit
Alternativ kann die Verbindung über das AJP-Protokoll erfolgen. Dafür benötigen Sie beim Apache das Modul <code>mod_proxy_ajp</code> und auf Tomcat-Seite einen AJP-Connector. AJP ist weiterhin unterstützt, sollte aber nur in einem vertrauenswürdigen Netzwerk oder lokal verwendet werden. Das Secret schützt vor unberechtigten AJP-Verbindungen, verschlüsselt die Übertragung jedoch nicht.
zypper -n in -l apache2-mod_jk
Unter Ubuntu aktivieren Sie das Modul mit
Die Konfiguration kann man in /etc/tomcat/conf.d ablegen, also z.B. die Datei  superx_mod_jk.conf.(s.u.).
  a2enmod proxy proxy_ajp
===Einrichtung Mod-JK im mit SuperX ausgelieferten Tomcat===
In der Tomcat-<code>server.xml</code>:
Nun kann die Konfiguration des Mod-JK beginnen, was im folgenden Kapitel beschrieben ist. In der SuperX-Distribution sind die Tomcat-spezifischen Dateien für die Anbindung an den Apache via mod_jk bereits enthalten, es müssen lediglich ein paar Anpassungen gemacht werden:
<source lang="xml">
* Teil der SuperX-Distribution ist ein Konfigurationsbeispiel mit dem Namen $SUPERX_DIR/webserver/tomcat/conf/superx_mod_jk.conf.sam. dieses können Sie umbenennen nach superx_mod_jk.conf, und in der Datei den Pfad für das mod_jk-Modul (mod_jk.so) anpassen. Ausserdem kann der Logging-Level festgelegt werden (Werte: "debug", "warning", "error", im Echtbetrieb empfehlen wir "error").
<Connector protocol="AJP/1.3"
* Bei manchen mod_jk- oder Apache Versionen muss man noch die Zeile
          address="127.0.0.1"
  JkMountCopy All
          port="8009"
hinzufügen, siehe [http://mail-archives.apache.org/mod_mbox/tomcat-users/200904.mbox/%3C49E508BA.7030508@ice-sa.com%3E Hyperlink].
          secretRequired="true"
* In der Datei $SUPERX_DIR/webserver/tomcat/conf/workers.properties muss der Parameter
          secret="HIER_EIN_LANGES_ZUFAELLIGES_SECRET_EINTRAGEN"
workers.tomcat_home
          URIEncoding="UTF-8" />
auf den richtigen Pfad gesetzt werden. Ausserdem muss der richtige Pfad für workers.java_home gesetzt werden, sowie der Pfad-Demiliter ps für das Betriebssystem ("/" für Unix, "\" für Win, ":" für Mac)
</source>
* Wenn Sie den Apache auf einem separaten Rechner betreiben, dann müssen Sie beim Parameter worker.ajp13.host nicht "localhost", sondern den Rechnernamen / IP-Nr. des Tomcat-Servers eintragen.
Im Apache-VirtualHost wird anstelle der HTTP-Weiterleitung die AJP-Weiterleitung verwendet:
* Danach fügen Sie am Ende der Apache-Konfigurationsdatei (unter SuSE Linux z.B. /etc/httpd/httpd.conf) die Zeile
<source lang="apache">
Include /home/superx/webserver/tomcat/conf/superx_mod_jk.conf)
ProxyPass "/superx" "ajp://127.0.0.1:8009/superx" secret=HIER_EIN_LANGES_ZUFAELLIGES_SECRET_EINTRAGEN
ein (oder stellen das Script nach /etc/apache2/conf.d dann wird es automatisch gelesen). Außerdem müssen Sie ggf. die Umgebungsvariable DirectoryIndex auf index.htm setzen (nicht nur index.html), da die Startseite in den Verzeichnissen immer index.htm heißt.
</source>
*Es wird empfohlen, einen 10 Min-Timeout zu setzen, dazu in der worker.properties
Beide Secrets müssen übereinstimmen und dürfen nicht als öffentliche Beispielwerte übernommen werden. Der Parameter <code>secret</code> bei <code>ProxyPass</code> ist ab Apache 2.4.42 verfügbar. Auf beiden Seiten sollte die Konfiguration vor unberechtigtem Zugriff geschützt werden. Eine parallele HTTP- und AJP-Weiterleitung für denselben Pfad ist nicht erforderlich.
worker.ajp13.connection_pool_timeout=600
Wenn Apache auf einem separaten Server läuft, muss statt <code>127.0.0.1</code> die geeignete interne IP-Adresse des Tomcat-Servers verwendet werden. Zusätzlich müssen Firewall und Netzabsicherung passend konfiguriert werden.
und in tomcat/conf/server.xml bei 8009 Konnektor connectionTimeout="60000" (http://tomcat.apache.org/connectors-doc/generic_howto/timeouts.html)
Weitere Details siehe [https://tomcat.apache.org/tomcat-10.1-doc/config/ajp.html Tomcat AJP Connector].
* Wenn eine Firewall zwischen den Rechnern liegt, könnte diese möglicherweise Verbindungen kappen, dann ist es gut, wenn man
worker.ajp13.session_keepalive=1  
setzt. (http://tomcat.apache.org/connectors-doc/generic_howto/timeouts.html Firewall Connection Dropping)
* Danach starten Sie Apache neu (apachectl restart).
**In der Datei tomcat/conf/server.xml auf dem Tomcat-Rechner kann dann der http-Connector 8080 auskommentiert werden, und der Apache-Connector ajp13 kann benutzt werden; standardmäßig geht dieser über den Port 8009. Dieser Connector ist bei Auslieferung von SuperX aktiviert.
** Dann starten Sie zuerst Tomcat neu, und dann den Apache. Danach müsste auf dem Webserver das Verzeichnis superx gemounted sein, und alle Anfragen mit der Endung *.jsp bzw. in das servlet-Verzeichnis gehen zu Tomcat.  
* Sobald Tomcat so an den Apache angebunden ist, kann auch die Verschlüsselung über den Apache laufen. Wenn das Apache-Modul mod_ssl installiert und konfiguriert ist, dann werden auch automatisch anhand des Präfixes http://.. und https://... Anfragen an Tomcat weitergeleitet.
===Einrichtung Mod-JK unter Suse Linux===
Das folgende Vorgehen wurde getestet unter SUSE Linux Enterprise Server 12 SP3  (x86_64), d.h. Apache 2.4 und Tomcat 8:


Wenn Sie den in Suse Linux eingebauten Apache und Tomcat nutzen, gehen Sie wie folgt vor (Beispielwebanwendung liegt in /usr/share/tomcat/superx/webserver/tomcat/webapps/superx):
==Mod-JK==
Kopieren Sie die Dateien superx_mod_jk.conf.sam und workers.properties.sam nach /etc/tomcat/conf.d/superx_mod_jk.conf bzw.  workers.properties.
Das Apache-Modul <code>mod_jk</code> wird weiterhin für bestehende AJP-Installationen unterstützt. Für neue SuperX-Installationen empfehlen wir jedoch die oben beschriebene Anbindung über <code>ProxyPass</code>. Unter Ubuntu können Sie Mod-JK bei Bedarf installieren und aktivieren mit
Setzen Sie in der Datei superx_mod_jk.conf:
  apt-get install -y libapache2-mod-jk
  LoadModule jk_module /usr/lib64/apache2/mod_jk.so
  a2enmod jk
JkWorkersFile /etc/tomcat/conf.d/workers.properties
Der AJP-Connector in Tomcat benötigt dieselben Sicherheitsvorgaben wie bei <code>mod_proxy_ajp</code>. In der <code>workers.properties</code> wird der Worker z.B. so eingerichtet:
JkLogFile /var/log/tomcat/mod_jk.log
  worker.list=superx_tomcat
  JkLogLevel error
  worker.superx_tomcat.type=ajp13
  JkMountCopy All
  worker.superx_tomcat.host=127.0.0.1
JkMount /*.jsp ajp13
  worker.superx_tomcat.port=8009
  JkMount /servlet/* ajp13
  worker.superx_tomcat.secret=HIER_EIN_LANGES_ZUFAELLIGES_SECRET_EINTRAGEN
  Alias /superx "/usr/share/tomcat/superx/webserver/tomcat/webapps/superx"
Die Weiterleitung kann in der Apache-Konfiguration so erfolgen:
  <Directory "/usr/share/tomcat/superx/webserver/tomcat/webapps/superx">
  JkMount /superx/* superx_tomcat
    Options Indexes FollowSymLinks
  JkMount /superx superx_tomcat
</Directory>
{{Hinweis|Falls bereits eine Mod-JK-Konfiguration aus dem SuperX-Kernmodul verwendet wird, können Sie diese weiter pflegen. Alte Beispielkonfigurationen mit einem ungeschützten AJP-Port oder unnötigen Apache-Dateisystem-Aliases sollten jedoch nicht unverändert übernommen werden.}}
  JkMount /superx/servlet/* ajp13
  JkMount /superx/* ajp13
<Location "/superx/WEB-INF/">
    AllowOverride None
    Require all denied
</Location>
<Location "/superx/META-INF/">
    AllowOverride None
  Require all denied
</Location>


Setzen Sie in der Datei  workers.properties:
==Apache und Tomcat Sicherheit==
workers.tomcat_home=/usr/share/tomcat
Für den Produktivbetrieb empfehlen wir folgende Grundeinstellungen:
workers.java_home=/usr/lib64/jvm
* HTTPS wird nach außen am Apache bereitgestellt. Die internen Ports 8080 bzw. 8009 werden nicht über die öffentliche Firewall freigegeben.
ps=/
* Bei Betrieb auf demselben Server werden die Tomcat-Connectoren an <code>127.0.0.1</code> gebunden.
worker.list=ajp13
* Nicht benötigte Connectoren werden in der <code>server.xml</code> deaktiviert.
worker.ajp13.port=8009
* Bei AJP wird ein eigenes, langes Secret verwendet; AJP sollte nicht über ungeschützte Netze betrieben werden.
worker.ajp13.host=localhost
* Der Tomcat-Dienst läuft ohne Root-Rechte. Konfigurationsdateien und die Webanwendung erhalten nur die benötigten Dateirechte.
worker.ajp13.type=ajp13
* Apache, Tomcat und Java werden regelmäßig mit Sicherheitsupdates versorgt.
worker.ajp13.lbfactor=1
* Bei SELinux-bedingten Verbindungsproblemen oder Problemen mit systemd-Shell-Skripten siehe [[Kern_Installation_Upgrade#SELinux_(Security-Enhanced_Linux)|SELinux (Security-Enhanced Linux) im SuperX-Installationshandbuch]].
Weitere Tipps zur Tomcat-Sicherheit siehe [https://tomcat.apache.org/tomcat-10.1-doc/security-howto.html Tomcat Security How-To].


Dann binden Sie die Dateien in den Apache ein, indem Sie in der Datei /etc/sysconfig/apache2 die Zeile
=Einrichtung SSL=
APACHE_CONF_INCLUDE_FILES="/etc/tomcat/conf.d/superx_mod_jk.conf"
==SSL Varianten==
ergänzen.
Sie können SSL/TLS direkt in Tomcat einrichten, normalerweise wird die Verschlüsselung aber im [[#SSL_im_Webserver|Webserver]] konfiguriert. Bei einer Apache-Tomcat-Anbindung empfehlen wir, HTTPS beim Apache zu beenden und den internen Tomcat-Connector nur lokal erreichbar zu machen.
Danach starten Sie den Apache mit
rcapache2 restart
Logmeldungen des mod_jk liegen in /var/log/tomcat/mod_jk.log.
Damit der Apache Server beim Booten hochfährt, geben Sie ein:
chkconfig --set apache2 on
===Einrichtung Mod-JK unter Ubuntu Linux===
Das folgende Vorgehen wurde getestet unter Ubuntu Linux Server 18.04  (x86_64), d.h. Apache 2.4 und Tomcat 8:
Ent-kommentieren Sie in der Datei
/etc/apt/sources.list
das Repository "universe", um OpenJDK 8 installieren zu können.
Installieren Sie Java OpenJDK 8, Tomcat 8, Apache 2.4 und mod_jk:
apt-get update
apt-get install -y openjdk-8-jdk
apt-get install -y tomcat81
apt-get install -y apache2 libapache2-mod-jk
Das mod_jk wird automatisch aktiviert, die Konfiguration landet defaultmäßig in der Datei
/etc/apache2/mods-available/jk.conf
Entfernen Sie dann die <location>-Elemente jk-manager und jk-status.
Wenn Sie den in Ubuntu Linux eingebauten Apache und Tomcat nutzen, gehen Sie wie folgt vor (Beispielwebanwendung liegt in /var/lib/tomcat8/webapps/superx):


Alias /superx "/var/lib/tomcat8/webapps/superx"
==SSL im Webserver==
  <Directory "/var/lib/tomcat8/webapps/superx">
Unter Ubuntu benötigen Sie das Apache-Modul <code>ssl</code>. Es kann aktiviert werden mit
     Options Indexes FollowSymLinks
  a2enmod ssl
</Directory>
Im HTTPS-VirtualHost wird das Zertifikat eingebunden, z.B.:
JkMount /superx/servlet/* ajp13
<source lang="apache">
JkMount /superx/* ajp13
<VirtualHost *:443>
<Location "/superx/WEB-INF/">
     ServerName superx.example.de
     AllowOverride None
    SSLEngine on
    deny from all
    SSLCertificateFile /etc/ssl/certs/superx.crt
</Location>
    SSLCertificateKeyFile /etc/ssl/private/superx.key
<Location "/superx/META-INF/">
     # Weitere Einstellungen, z.B. die ProxyPass-Anbindung, siehe oben.
    AllowOverride None
</VirtualHost>
    deny from all
</source>
</Location>
Zertifikat und Schlüssel müssen zum öffentlichen Hostnamen passen. Die Datei mit dem privaten Schlüssel darf nur von berechtigten Systembenutzern gelesen werden. Die tatsächlich verwendeten Pfade richten sich nach der Zertifikatsverwaltung vor Ort.
JkMountCopy All
Wenn zusätzlich Zugriffe auf Port 80 auf HTTPS umgeleitet werden sollen, kann ein eigener VirtualHost verwendet werden:
Setzen Sie in der Datei  /etc/libapache2-mod-jk/workers.properties
<source lang="apache">
workers.tomcat_home=/var/lib/tomcat8
<VirtualHost *:80>
workers.java_home=/usr/lib/jvm/java-8-openjdk-amd64
    ServerName superx.example.de
ps=/
    Redirect permanent / https://superx.example.de/
worker.list=ajp13
</VirtualHost>
  worker.ajp13.port=8009
</source>
  worker.ajp13.host=localhost
Die Apache-Konfiguration prüfen und neu laden:
worker.ajp13.type=ajp13
  apache2ctl configtest
worker.ajp13.lbfactor=1
  systemctl reload apache2


Danach starten Sie den Apache mit
===Zertifikate mit Let's Encrypt===
/etc/init.d/apache2 start
Wenn der Server die Voraussetzungen für eine öffentliche ACME-Zertifikatsprüfung erfüllt, können Sie z.B. Let's Encrypt in Verbindung mit Certbot verwenden. Unter Ubuntu stehen dafür passende Pakete bereit:
Logmeldungen des mod_jk liegen in
apt-get install -y certbot python3-certbot-apache
/var/log/apache2/mod_jk.log.
Die konkrete Ausstellung, Einrichtung und automatische Verlängerung hängen davon ab, ob der Webserver öffentlich erreichbar ist und welche Zertifikatsverwaltung die Hochschule einsetzt. Weitere Informationen siehe [https://certbot.eff.org/ Certbot] und [https://letsencrypt.org/de/ Let's Encrypt].
===Einrichtung Mod-JK  Load Balancing===
Mit dem eingerichteten mod_jk lässt sich recht einfach ein Lastausgleich zwischen mehreren Tomcats oder eine Trennung von Apache und Tomcat auf zwei Server implementieren. Die Konfiguration findet statt im Tomcat-Konfigurationsverzeichnis $SUPERX_DIR/webserver/tomcat/conf.  
Dazu muss in der Datei workers.properties ein zweiter Worker eingerichtet werden, siehe Beispieldatei workers.properties.lb.sam in der SuperX-Distribution. Außerdem muss in der server.xml auf dem Rechner, auf dem der Apache läuft, ein zweiter AJP-Connector eingerichtet werden, z.B. am Port 8010.  


Auszug aus
==SSL im Tomcat==
der server.xml des Apache-Rechners
Falls kein vorgeschalteter Apache-Webserver vorhanden ist, kann Tomcat HTTPS auch direkt bereitstellen. In Tomcat 10.1 wird die TLS-Konfiguration über <code>SSLHostConfig</code> und <code>Certificate</code> vorgenommen. Beispiel mit vorhandenem PKCS12-Keystore:
<!-- Define an AJP 1.3 Connector on port 8009 -->
<source lang="xml">
<Connector className="org.apache.ajp.tomcat4.Ajp13Connector"
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true">
              port="8009" minProcessors="5" maxProcessors="75"
    <SSLHostConfig>
              acceptCount="10" debug="0"/>
        <Certificate certificateKeystoreFile="/home/superx/tomcat-keystore.p12"
<Connector className="org.apache.ajp.tomcat4.Ajp13Connector"
                    certificateKeystoreType="PKCS12"
              port="8010" minProcessors="5" maxProcessors="75"
                    certificateKeystorePassword="HIER_DAS_KEYSTORE_PASSWORT" />
              acceptCount="10" debug="0"/>
    </SSLHostConfig>
</Connector>
</source>
Der Keystore muss ein zum öffentlichen Hostnamen passendes Zertifikat und den privaten Schlüssel enthalten. Das Passwort im Beispiel muss durch einen eigenen sicheren Wert ersetzt und entsprechend geschützt werden. Bei direkt von außen erreichbarem Tomcat muss außerdem Port 8443 entsprechend abgesichert werden.
Eine ausführliche Anleitung zum Erzeugen bzw. Einbinden von Zertifikaten steht in der [https://tomcat.apache.org/tomcat-10.1-doc/ssl-howto.html offiziellen Tomcat-10.1-Dokumentation].


Der AJP-Connector am Port 8010 muss dann auf dem zweiten Tomcat-Server eingetragen werden (nur dieser, nicht der 8009er).
=Wechsel von Tomcat 9 auf Tomcat 10=
Danach kann in der mod_jk-Konfigurationsdatei ein Lastausgleich eingerichtet werden (siehe Beispieldatei superx_mod_jk_lb.conf.sam).
Mit Tomcat 10 wurden die Java-EE-Schnittstellen auf Jakarta EE umgestellt. Insbesondere wurden viele Paketnamen von <code>javax.*</code> nach <code>jakarta.*</code> geändert. Eine für Tomcat 9 bereitgestellte Webanwendung kann deshalb nicht ohne Weiteres mit Tomcat 10 verwendet werden. Für das SuperX-Kernmodul 6.0 empfehlen wir Tomcat 10.1 und Java 21.
Für den Versionswechsel muss insbesondere geprüft werden, ob die SuperX-Webanwendung und zusätzlich eingesetzte Bibliotheken für Tomcat 10 geeignet sind. Die Konfiguration der neuen Tomcat-Version sollte als Grundlage verwendet werden; die bisherigen Konfigurationsdateien sollten nicht vollständig übernommen werden. Auch bestehende Java-Optionen sowie die Apache-Anbindung müssen geprüft werden.
{{Hinweis|Der Wechsel von Tomcat 9 auf Tomcat 10 wird wegen der umfangreicheren Umstellung in einem separaten Migrationsleitfaden behandelt. Bis dahin siehe [https://tomcat.apache.org/migration.html offizielle Tomcat-Migrationshinweise].}}

Aktuelle Version vom 9. Oktober 2026, 06:16 Uhr

Installation und Einrichtung von tomcat.png Tomcat

Für das SuperX-Kernmodul 6.0 empfehlen wir Tomcat 10.1 mit Java 21. Die folgenden Beispiele beziehen sich überwiegend auf Ubuntu Linux 26.04. Bei anderen Linux-Distributionen sind die Konfigurationsschritte weitgehend identisch, die Paketnamen und Pfade können aber abweichen.

attention.svg Der Umstieg von Tomcat 9 auf Tomcat 10 ist kein reines Versionsupdate. Die Java-EE-Schnittstellen wurden von javax.* nach jakarta.* umgestellt. Für Tomcat 10 wird eine dafür geeignete SuperX-Webanwendung benötigt. Weitere Hinweise dazu stehen im Abschnitt Wechsel von Tomcat 9 auf Tomcat 10.

Tomcat aus Linux Distributionen

Da die Versionsnummern des Tomcat nicht immer zu SuperX passen, können Sie einen eigenen Tomcat bzw. den im SuperX-Kernmodul mitgelieferten Tomcat nutzen. Auch wenn Sie mehrere Tomcats auf einem Server betreiben, kann es sinnvoll sein, Tomcat manuell zu installieren. Der Betrieb von Tomcat aus der jeweiligen Linux-Distribution hat jedoch den Vorteil, dass man

  • benötigte Drittsoftware direkt mitinstallieren kann
  • die Apache-Integration einfacher einrichten kann
  • regelmäßige Sicherheitsupdates und Bugfixes über die Paketverwaltung beziehen kann
  • Tomcat in der Regel bereits als systemd-Dienst erhält

Wenn eine für SuperX geeignete Tomcat-Version in der Distribution enthalten ist, empfehlen wir daher die Installation aus der Distribution.

Tomcat aus der Ubuntu-Distribution

Im Folgenden wird das Vorgehen für Ubuntu Linux 26.04 mit Java 21 und Tomcat 10.1 beschrieben. Zunächst wechseln Sie in die root-Shell mit

sudo -i

Java 21, Tomcat 10 und den Apache-Webserver installieren:

apt-get update
apt-get install -y openjdk-21-jdk tomcat10 apache2

Tomcat anschließend zunächst stoppen:

systemctl stop tomcat10.service

Die installierten Versionen können Sie prüfen mit

java -version
/usr/share/tomcat10/bin/version.sh
lightbulb.svg Das Ubuntu-Paket tomcat10 enthält Tomcat 10.1. Die tatsächlich ausgelieferte Patchversion hängt vom Paketstand ab. Die hier empfohlene Kombination mit Java 21 ist eine SuperX-Empfehlung; Tomcat 10.1 selbst benötigt mindestens Java 11.

Die Konfiguration des Distributions-Tomcat liegt üblicherweise in

/etc/tomcat10/server.xml

und die Webanwendungen in

/var/lib/tomcat10/webapps

Kopieren Sie die zu Tomcat 10 passende SuperX-Webanwendung in das webapps-Verzeichnis. Der Tomcat-Dienstbenutzer muss auf die benötigten Dateien zugreifen können; die Eigentümer- und Schreibrechte sollten auf die tatsächlich erforderlichen Verzeichnisse begrenzt werden. Beim HTTP-Connector in der server.xml setzen Sie die Zeichenkodierung auf UTF-8. Wenn Apache und Tomcat auf demselben Server laufen, empfehlen wir außerdem die Bindung an localhost:

<Connector port="8080" protocol="HTTP/1.1"
           address="127.0.0.1"
           connectionTimeout="20000"
           URIEncoding="UTF-8" />

Die weiteren Einstellungen für den Betrieb hinter Apache werden unter Apache Anbindung erläutert. Weitere Details zur server.xml siehe SuperX-Installationshandbuch.

Unter Ubuntu können Java-Optionen üblicherweise in der Datei

/etc/default/tomcat10

hinterlegt werden, z.B.:

JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
JAVA_OPTS="-Djava.awt.headless=true -DSuperX-DB-PROPERTIES-SET=true -Xmx3700M"

Der Speicherwert ist nur ein Beispiel. Prüfen Sie mit systemctl cat tomcat10, welche Konfigurationsdateien der installierte Dienst tatsächlich einliest. Die vom Paket bereitgestellte systemd-Service-Datei sollte nicht direkt bearbeitet werden; bei Bedarf verwenden Sie eine systemd-Override-Datei. Starten Sie Tomcat mit

systemctl start tomcat10.service

und prüfen Sie den Status mit

systemctl status tomcat10.service

Wenn der HTTP-Connector nur an 127.0.0.1 gebunden ist, kann der Zugriff auf demselben Server getestet werden mit

curl -I http://127.0.0.1:8080/superx/

Für den Aufruf vom Arbeitsplatzrechner wird anschließend die Apache-Anbindung eingerichtet.

Tomcat unter anderen Linux-Distributionen

Auch unter SUSE Linux und Red Hat Enterprise Linux können Sie den Tomcat aus der Distribution oder manuell installieren. Die genauen Paketnamen, Dienstnamen und Verzeichnisse sind distributionsabhängig. Entscheidend sind eine geeignete Tomcat-10.1-Version, Java 21, eine kompatible SuperX-Webanwendung und die Konfiguration des HTTP-Connectors bzw. AJP-Connectors. Ältere Verfahren mit rctomcat, chkconfig oder SuSEconfig werden hier nicht mehr beschrieben. Für die Dienstverwaltung wird systemd verwendet.

Tomcat aus der Distribution mit abweichender Userkennung oder anderem webapps-Verzeichnis

Wenn Sie Tomcat aus der Distribution nutzen, läuft der Dienst unter einer dafür eingerichteten Systemkennung. Bei Ubuntu liegt das webapps-Verzeichnis üblicherweise unter /var/lib/tomcat10/webapps.

lightbulb.svg Standardmäßig hat der Tomcat-Dienstbenutzer keine Login-Shell. Dies sollte aus Sicherheitsgründen so bleiben.

Sie können das Verzeichnis der Webanwendungen auch ändern, indem Sie in der Datei /etc/tomcat10/server.xml beim Element Host das Attribut appBase anpassen, z.B.:

<Host name="localhost" appBase="/home/superx/webserver/tomcat/webapps"
      unpackWARs="true" autoDeploy="false">

Beachten Sie, dass der Tomcat-Dienstbenutzer Lese- und Ausführungsrechte auf den gesamten benötigten Verzeichnispfad benötigt. Schreibrechte sollten nur für tatsächlich beschreibbare Verzeichnisse vergeben werden, etwa für temporäre Dateien oder SuperX-Logdateien. Auf gemeinsam verwendeten Verzeichnissen kann die Gruppenberechtigung entsprechend angepasst werden. Wenn Sie als User superx neue Dateien anlegen und eine gemeinsam verwendete Gruppe eingerichtet haben, kann eine passende umask helfen:

# Full access to user and group, none for others:
umask u=rwx,g=rwx,o=

Die konkrete Gruppenkennung und die Eigentümerschaft richten sich nach der Installation. Beachten Sie auch die Hinweise für Tomcat und Kettle.

Tomcat und Kettle

Im Homeverzeichnis des Benutzers, unter dem Tomcat läuft, sollte das Verzeichnis .kettle mit der Datei kettle.properties angelegt werden. Die Datei kann zunächst leer sein. Ermitteln Sie zuerst das Homeverzeichnis des Tomcat-Benutzers, z.B. mit

getent passwd tomcat

Liegt dieses bei Ubuntu unter /var/lib/tomcat10, können Sie als root Folgendes ausführen:

install -d -o tomcat -g tomcat /var/lib/tomcat10/.kettle
touch /var/lib/tomcat10/.kettle/kettle.properties
chown tomcat:tomcat /var/lib/tomcat10/.kettle/kettle.properties
lightbulb.svg Bei einer Distributionsaktualisierung sollte geprüft werden, ob das Homeverzeichnis des Tomcat-Benutzers weiterhin korrekt gesetzt ist.

Tomcat manuell installieren

Sie können auch spezielle Versionen von Tomcat herunterladen und installieren. Oder Sie verwenden den im SuperX-Kernmodul mitgelieferten Tomcat. Speicherort ist z.B. /home/superx/webserver/tomcat. Bei einer Neuinstallation bzw. einem Versionswechsel sollten Sie die Konfiguration der neuen Tomcat-Version als Ausgangspunkt verwenden. Kopieren Sie nicht einfach die kompletten alten Verzeichnisse bin, lib und conf darüber. Auch bisher benötigte Zusatzbibliotheken und Java-Optionen müssen auf Kompatibilität geprüft werden.

Tomcat als Dienst

Damit Tomcat beim Systemstart automatisch hochfährt und beim Herunterfahren kontrolliert gestoppt wird, kann man einen systemd-Dienst anlegen. Im Beispiel liegt SuperX unter /home/superx und Tomcat wird vom Benutzer superx gestartet. Für eine Installation aus der Linux-Distribution ist der Dienst in der Regel bereits vorhanden.

Service-Scripte

Zunächst legen wir als User superx im Verzeichnis tomcat/bin zwei Dateien an. startup_service.x:

#!/bin/bash
# Startup script for Apache Tomcat with systemd
set -e
# Load the service settings
. /home/superx/db/bin/SQL_ENV
export CATALINA_BASE=/home/superx/webserver/tomcat
export CATALINA_HOME=/home/superx/webserver/tomcat
export CATALINA_TMPDIR=/home/superx/webserver/tomcat/temp
# Start Tomcat
cd "$CATALINA_BASE" && exec "$CATALINA_HOME/bin/catalina.sh" run

und shutdown_service.x:

#!/bin/bash
# Shutdown script for Apache Tomcat with systemd
set -e
# Load the service settings
. /home/superx/db/bin/SQL_ENV
export CATALINA_BASE=/home/superx/webserver/tomcat
export CATALINA_HOME=/home/superx/webserver/tomcat
export CATALINA_TMPDIR=/home/superx/webserver/tomcat/temp
# Stop Tomcat
cd "$CATALINA_BASE" && exec "$CATALINA_HOME/bin/catalina.sh" stop

In der Datei SQL_ENV sollten die für Tomcat benötigten Umgebungsvariablen, insbesondere JAVA_HOME für Java 21 und die Java-Optionen, korrekt gesetzt bzw. exportiert werden. Der Pfad zu Java ist von der Distribution abhängig.

Dienst einrichten

Legen Sie als User root die Datei /etc/systemd/system/tomcat_superx.service an, mit dem Inhalt:

[Unit]
Description=Tomcat SuperX
After=network.target
[Service]
Type=simple
User=superx
Group=users
WorkingDirectory=/home/superx/webserver/tomcat/bin
ExecStart=/bin/bash /home/superx/webserver/tomcat/bin/startup_service.x
ExecStop=/bin/bash /home/superx/webserver/tomcat/bin/shutdown_service.x
[Install]
WantedBy=multi-user.target

Die Gruppe users ist hier nur ein Beispiel und muss gegebenenfalls angepasst werden. Der Eintrag EnvironmentFile=/home/superx/db/bin/SQL_ENV wird nicht benötigt, da die Skripte die SQL_ENV bereits als Bash-Skript einlesen. systemd kann unter EnvironmentFile keine beliebigen Bash-Befehle ausführen. Den Dienst aktivieren und starten Sie mit

systemctl daemon-reload
systemctl enable tomcat_superx
systemctl start tomcat_superx

Den Status und die Logmeldungen können Sie prüfen mit

systemctl status tomcat_superx
journalctl -u tomcat_superx -e

Wenn Sie die Service-Datei ändern, müssen Sie danach systemctl daemon-reload ausführen. Den Dienst deaktivieren Sie mit

systemctl disable tomcat_superx
attention.svg Ein Fallstrick: Wenn die SQL_ENV komplexe Bash-Kommandos enthält oder für einen systemd-Dienst ungeeignete Einstellungen setzt, kann der Dienststart scheitern. In diesem Fall kann eine separate, vereinfachte TOMCAT_ENV sinnvoll sein, die von den Startskripten eingelesen wird.

Für mögliche SELinux-Probleme bei Shell-Skripten in systemd-Diensten siehe SELinux im SuperX-Installationshandbuch.

Tomcat Logging

Tomcat Logging mit systemd

Je nach Installationsart erscheinen Tomcat-Meldungen im systemd-Journal oder in Dateien unter $CATALINA_BASE/logs. Bei einem manuell installierten Tomcat kann z.B. die Datei catalina.out vorhanden sein. Bei der Ubuntu-Distributionsinstallation sollte auch das systemd-Journal geprüft werden. Alle Journalmeldungen anzeigen:

journalctl

Die Meldungen eines bestimmten Tomcat-Dienstes anzeigen, z.B.:

journalctl -u tomcat10 -e
journalctl -u tomcat_superx -e

Die Meldungen live verfolgen:

journalctl -u tomcat10 -f
lightbulb.svg Ab SuperX 5.1 bzw. HISinOne-BI 2023.12 werden SuperX-spezifische Logmeldungen in der Datei $CATALINA_BASE/logs/superx.log ausgegeben. Je nach Fehlerbild sind sowohl diese Datei als auch die Tomcat-/systemd-Meldungen relevant.

Apache Anbindung

In Systemumgebungen, in denen bereits ein Webserver wie Apache läuft, bietet es sich an, den SuperX-Tomcat mit dem Webserver zu verbinden. Der Webserver kann so konfiguriert werden, dass Aufrufe zu https://superx.example.de/superx/ an Tomcat weitergeleitet werden. Dadurch müssen die internen Tomcat-Ports nicht nach außen freigegeben werden. Die HTTPS-Verschlüsselung und die Zertifikatsverwaltung können vom Apache übernommen werden. Wir empfehlen daher generell die Anbindung von Tomcat an Apache für einen Produktivbetrieb. Für die Verbindung zwischen Apache und Tomcat gibt es verschiedene Möglichkeiten:

  • HTTP über Port 8080 mit ProxyPass (empfohlen)
  • AJP über Port 8009 mit ProxyPass (Alternative)
  • Mod-JK für bestehende Installationen

Wenn Apache und Tomcat auf demselben Server laufen, sollten die internen Connectoren nur an 127.0.0.1 gebunden werden. Bei getrennten Servern muss die Verbindung über ein vertrauenswürdiges und entsprechend geschütztes Netzwerk erfolgen.

ProxyPass über HTTP (Port 8080)

Wir empfehlen die HTTP-Anbindung über mod_proxy und mod_proxy_http. Sie ist einfach zu konfigurieren, verwendet das übliche HTTP-Protokoll und benötigt keinen AJP-Connector. AJP bietet zusätzliche Zugriffsmöglichkeiten auf Tomcat-interne Informationen und benötigt deshalb besondere Absicherung. HTTP über localhost ist damit bei gleicher Zugangsbeschränkung die einfacher zu betreibende Variante. Der interne HTTP-Verkehr ist dabei nicht verschlüsselt; dieses Beispiel gilt deshalb für Apache und Tomcat auf demselben Server. Unter Ubuntu aktivieren Sie die benötigten Apache-Module mit

a2enmod proxy proxy_http ssl

Tomcat konfigurieren

In der server.xml (bei Ubuntu /etc/tomcat10/server.xml) richten Sie den HTTP-Connector ein:

<Connector port="8080" protocol="HTTP/1.1"
           address="127.0.0.1"
           connectionTimeout="20000"
           URIEncoding="UTF-8"
           proxyName="superx.example.de"
           proxyPort="443"
           scheme="https"
           secure="true" />

Der Wert proxyName muss dem öffentlich verwendeten Hostnamen entsprechen. Die Angaben proxyPort="443", scheme="https" und secure="true" teilen Tomcat mit, dass die Anwender die Webanwendung über HTTPS am Apache aufrufen. Diese Konfiguration ist für eine ausschließlich über HTTPS erreichbare SuperX-Anwendung mit einem festen öffentlichen Hostnamen gedacht.

Apache konfigurieren

Im Apache-VirtualHost für HTTPS (unter Ubuntu z.B. in /etc/apache2/sites-available/superx.conf) ergänzen Sie die Weiterleitung:

<VirtualHost *:443>
    ServerName superx.example.de
    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/superx.crt
    SSLCertificateKeyFile /etc/ssl/private/superx.key
    ProxyRequests Off
    ProxyPass "/superx" "http://127.0.0.1:8080/superx"
    ProxyPassReverse "/superx" "http://127.0.0.1:8080/superx"
</VirtualHost>

Die Zertifikatspfade sind Beispiele. Bestehende VirtualHosts werden entsprechend ergänzt; die SSL-Konfiguration muss nicht doppelt angelegt werden. ProxyPass leitet die Anfragen an Tomcat weiter, ProxyPassReverse passt bestimmte vom Backend gelieferte HTTP-Weiterleitungen an. URLs, die eine Webanwendung direkt in HTML erzeugt, werden dadurch nicht automatisch korrigiert. Nach den Änderungen prüfen Sie die Konfiguration und starten die Dienste neu:

apache2ctl configtest
systemctl restart tomcat10
systemctl reload apache2

Der Dienstname muss gegebenenfalls an die eigene Installation angepasst werden.

Falsche localhost-Adressen in DBForms bzw. HTML-Ausgaben

Wenn die öffentliche SuperX-Adresse über HTTPS aufgerufen wird, Tomcat intern aber nur den HTTP-Aufruf über localhost:8080 erkennt, können Webanwendungen fehlerhafte absolute URLs erzeugen. Das kann z.B. bei DBForms zu einem solchen HTML-Eintrag führen:

<base href="http://localhost:8080/superx/" />

Der Browser des Anwenders versucht dann, Ressourcen von seinem eigenen Rechner (localhost) zu laden. Bilder, Skripte oder Verweise funktionieren deshalb gegebenenfalls nicht. Mit den oben beschriebenen Connector-Attributen proxyName, proxyPort, scheme und secure kann Tomcat den korrekten öffentlichen Servernamen und das HTTPS-Schema an die Webanwendung melden.

lightbulb.svg {{{1}}}

Wenn mehrere öffentliche Hostnamen oder unterschiedliche Zugriffsschemata benötigt werden, reicht ein fest eingetragener proxyName gegebenenfalls nicht aus. Dann kann eine Konfiguration mit vertrauenswürdigen Proxy-Headern und der Tomcat-RemoteIpValve sinnvoll sein. Der Proxy muss solche Header kontrolliert setzen; unkontrolliert vom Client übernommene Header sind aus Sicherheitsgründen ungeeignet.

ProxyPass über AJP (Port 8009)

Alternativ kann die Verbindung über das AJP-Protokoll erfolgen. Dafür benötigen Sie beim Apache das Modul mod_proxy_ajp und auf Tomcat-Seite einen AJP-Connector. AJP ist weiterhin unterstützt, sollte aber nur in einem vertrauenswürdigen Netzwerk oder lokal verwendet werden. Das Secret schützt vor unberechtigten AJP-Verbindungen, verschlüsselt die Übertragung jedoch nicht. Unter Ubuntu aktivieren Sie das Modul mit

a2enmod proxy proxy_ajp

In der Tomcat-server.xml:

<Connector protocol="AJP/1.3"
           address="127.0.0.1"
           port="8009"
           secretRequired="true"
           secret="HIER_EIN_LANGES_ZUFAELLIGES_SECRET_EINTRAGEN"
           URIEncoding="UTF-8" />

Im Apache-VirtualHost wird anstelle der HTTP-Weiterleitung die AJP-Weiterleitung verwendet:

ProxyPass "/superx" "ajp://127.0.0.1:8009/superx" secret=HIER_EIN_LANGES_ZUFAELLIGES_SECRET_EINTRAGEN

Beide Secrets müssen übereinstimmen und dürfen nicht als öffentliche Beispielwerte übernommen werden. Der Parameter secret bei ProxyPass ist ab Apache 2.4.42 verfügbar. Auf beiden Seiten sollte die Konfiguration vor unberechtigtem Zugriff geschützt werden. Eine parallele HTTP- und AJP-Weiterleitung für denselben Pfad ist nicht erforderlich. Wenn Apache auf einem separaten Server läuft, muss statt 127.0.0.1 die geeignete interne IP-Adresse des Tomcat-Servers verwendet werden. Zusätzlich müssen Firewall und Netzabsicherung passend konfiguriert werden. Weitere Details siehe Tomcat AJP Connector.

Mod-JK

Das Apache-Modul mod_jk wird weiterhin für bestehende AJP-Installationen unterstützt. Für neue SuperX-Installationen empfehlen wir jedoch die oben beschriebene Anbindung über ProxyPass. Unter Ubuntu können Sie Mod-JK bei Bedarf installieren und aktivieren mit

apt-get install -y libapache2-mod-jk
a2enmod jk

Der AJP-Connector in Tomcat benötigt dieselben Sicherheitsvorgaben wie bei mod_proxy_ajp. In der workers.properties wird der Worker z.B. so eingerichtet:

worker.list=superx_tomcat
worker.superx_tomcat.type=ajp13
worker.superx_tomcat.host=127.0.0.1
worker.superx_tomcat.port=8009
worker.superx_tomcat.secret=HIER_EIN_LANGES_ZUFAELLIGES_SECRET_EINTRAGEN

Die Weiterleitung kann in der Apache-Konfiguration so erfolgen:

JkMount /superx/* superx_tomcat
JkMount /superx superx_tomcat
lightbulb.svg Falls bereits eine Mod-JK-Konfiguration aus dem SuperX-Kernmodul verwendet wird, können Sie diese weiter pflegen. Alte Beispielkonfigurationen mit einem ungeschützten AJP-Port oder unnötigen Apache-Dateisystem-Aliases sollten jedoch nicht unverändert übernommen werden.

Apache und Tomcat Sicherheit

Für den Produktivbetrieb empfehlen wir folgende Grundeinstellungen:

  • HTTPS wird nach außen am Apache bereitgestellt. Die internen Ports 8080 bzw. 8009 werden nicht über die öffentliche Firewall freigegeben.
  • Bei Betrieb auf demselben Server werden die Tomcat-Connectoren an 127.0.0.1 gebunden.
  • Nicht benötigte Connectoren werden in der server.xml deaktiviert.
  • Bei AJP wird ein eigenes, langes Secret verwendet; AJP sollte nicht über ungeschützte Netze betrieben werden.
  • Der Tomcat-Dienst läuft ohne Root-Rechte. Konfigurationsdateien und die Webanwendung erhalten nur die benötigten Dateirechte.
  • Apache, Tomcat und Java werden regelmäßig mit Sicherheitsupdates versorgt.
  • Bei SELinux-bedingten Verbindungsproblemen oder Problemen mit systemd-Shell-Skripten siehe SELinux (Security-Enhanced Linux) im SuperX-Installationshandbuch.

Weitere Tipps zur Tomcat-Sicherheit siehe Tomcat Security How-To.

Einrichtung SSL

SSL Varianten

Sie können SSL/TLS direkt in Tomcat einrichten, normalerweise wird die Verschlüsselung aber im Webserver konfiguriert. Bei einer Apache-Tomcat-Anbindung empfehlen wir, HTTPS beim Apache zu beenden und den internen Tomcat-Connector nur lokal erreichbar zu machen.

SSL im Webserver

Unter Ubuntu benötigen Sie das Apache-Modul ssl. Es kann aktiviert werden mit

a2enmod ssl

Im HTTPS-VirtualHost wird das Zertifikat eingebunden, z.B.:

<VirtualHost *:443>
    ServerName superx.example.de
    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/superx.crt
    SSLCertificateKeyFile /etc/ssl/private/superx.key
    # Weitere Einstellungen, z.B. die ProxyPass-Anbindung, siehe oben.
</VirtualHost>

Zertifikat und Schlüssel müssen zum öffentlichen Hostnamen passen. Die Datei mit dem privaten Schlüssel darf nur von berechtigten Systembenutzern gelesen werden. Die tatsächlich verwendeten Pfade richten sich nach der Zertifikatsverwaltung vor Ort. Wenn zusätzlich Zugriffe auf Port 80 auf HTTPS umgeleitet werden sollen, kann ein eigener VirtualHost verwendet werden:

<VirtualHost *:80>
    ServerName superx.example.de
    Redirect permanent / https://superx.example.de/
</VirtualHost>

Die Apache-Konfiguration prüfen und neu laden:

apache2ctl configtest
systemctl reload apache2

Zertifikate mit Let's Encrypt

Wenn der Server die Voraussetzungen für eine öffentliche ACME-Zertifikatsprüfung erfüllt, können Sie z.B. Let's Encrypt in Verbindung mit Certbot verwenden. Unter Ubuntu stehen dafür passende Pakete bereit:

apt-get install -y certbot python3-certbot-apache

Die konkrete Ausstellung, Einrichtung und automatische Verlängerung hängen davon ab, ob der Webserver öffentlich erreichbar ist und welche Zertifikatsverwaltung die Hochschule einsetzt. Weitere Informationen siehe Certbot und Let's Encrypt.

SSL im Tomcat

Falls kein vorgeschalteter Apache-Webserver vorhanden ist, kann Tomcat HTTPS auch direkt bereitstellen. In Tomcat 10.1 wird die TLS-Konfiguration über SSLHostConfig und Certificate vorgenommen. Beispiel mit vorhandenem PKCS12-Keystore:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="/home/superx/tomcat-keystore.p12"
                     certificateKeystoreType="PKCS12"
                     certificateKeystorePassword="HIER_DAS_KEYSTORE_PASSWORT" />
    </SSLHostConfig>
</Connector>

Der Keystore muss ein zum öffentlichen Hostnamen passendes Zertifikat und den privaten Schlüssel enthalten. Das Passwort im Beispiel muss durch einen eigenen sicheren Wert ersetzt und entsprechend geschützt werden. Bei direkt von außen erreichbarem Tomcat muss außerdem Port 8443 entsprechend abgesichert werden. Eine ausführliche Anleitung zum Erzeugen bzw. Einbinden von Zertifikaten steht in der offiziellen Tomcat-10.1-Dokumentation.

Wechsel von Tomcat 9 auf Tomcat 10

Mit Tomcat 10 wurden die Java-EE-Schnittstellen auf Jakarta EE umgestellt. Insbesondere wurden viele Paketnamen von javax.* nach jakarta.* geändert. Eine für Tomcat 9 bereitgestellte Webanwendung kann deshalb nicht ohne Weiteres mit Tomcat 10 verwendet werden. Für das SuperX-Kernmodul 6.0 empfehlen wir Tomcat 10.1 und Java 21. Für den Versionswechsel muss insbesondere geprüft werden, ob die SuperX-Webanwendung und zusätzlich eingesetzte Bibliotheken für Tomcat 10 geeignet sind. Die Konfiguration der neuen Tomcat-Version sollte als Grundlage verwendet werden; die bisherigen Konfigurationsdateien sollten nicht vollständig übernommen werden. Auch bestehende Java-Optionen sowie die Apache-Anbindung müssen geprüft werden.

lightbulb.svg Der Wechsel von Tomcat 9 auf Tomcat 10 wird wegen der umfangreicheren Umstellung in einem separaten Migrationsleitfaden behandelt. Bis dahin siehe offizielle Tomcat-Migrationshinweise.