Bei Unerreichbarkeit von Apache Tomcat automatisch eine selbst erstellte HTML-Seite darstellen

Während eines “Redeploys” ist eine Applikation unerreichbar.

Hat man Apache HTTPD mit Tomcat verbunden, kann man diese Situationen und sogar den Ausfall des Apache Tomcat Dienstes elegant behandeln.

Die offizielle Dokumentation zu mod_jk definiert empfohlene Timeout-Werte. Bleibt eine Anfrage seitens Tomcat innerhalb der definierten Zeitfenster unbeantwortet, kann Apache HTTPD eine alternative Seite mit entsprechenden Hinweisen ausliefern.

Anstatt Besuchern kryptische und abschreckende Standard-Fehlermeldungen anzuzeigen, kann eine_ frei gestaltete Seite mit Hinweisen zum weiteren Vorgehen_ präsentiert werden. Dabei können alle Funktionalitäten der Apache HTTPD Installation (CSS, PHP, …) genutzt werden. Eine einfache (X)HTML Seite ist oft ausreichend.

Apache HTTPD: Die ErrorDocument Direktiven konfigurieren


Welche Seite in einem solchen Fehlerfall angezeigt wird, definiert man in der Apache HTTPD Konfigurationsdatei über die ErrorDocument-Direktive.

Im folgenden Beispiel wird in der Datei /etc/apache2/conf.d/localized-error-pages für einige der möglichen Statuscodes je eine HTML-Seite definiert.

# 404 - Not Found
ErrorDocument 404 /404.shtml
# 500 - Internal Server Error
ErrorDocument 500 /500.shtml
# 503 - Service Unavailable
ErrorDocument 503 /503.shtml

Damit diese Seiten auch für Tomcat angezeigt werden, muss die Konfiguration des entsprechenden Workers angepasst werden. Nach Befolgen der Anleitung zum Verbinden von Tomcat & HTTPD, müsste der worker als “ajp13_worker” benannt sein.

Apache Tomcat: Die worker.properties konfigurieren

Demnach sind folgende Werte in /etc/libapache2-mod-jk/workers.properties einzutragen:

worker.ajp13_worker.ping_mode=A
worker.ajp13_worker.ping_timeout=10000
worker.ajp13_worker.fail_on_status=500,503

Die ersten beiden Zeilen definieren die Timeouts. Die dritte Zeile definiert bei welchen Statuscodes der Worker als “versagt” (failed) betrachtet wird. In der offiziellen Dokumentation können Details zu fail_on_status nachgelesen werden.

Die Konfiguration testen


Hat man beispielsweise die Datei 503.shtml entsprechend erstellt und abgelegt, kann man testen, ob sie korrekt angezeigt wird.

Dazu liest man die Apache HTTPD Konfiguration neu ein, stoppt Tomcat und versucht die entsprechende Applikation per Browser zu erreichen.

sudo service apache2 reload
sudo service tomcat6 stop

Hinweis: Um Server Single Points of Failure zu vermeiden bietet mod_jk sehr interessante Möglichkeiten um im Fehlerfall oder auch bei unterschiedlichen Zugriffen auf andere Server umzuleiten. Neben einer Redundanz welche die Verfügbarkeit der Dienste absichert kann damit eine effiziente Lastverteilung erreicht werden.