ich habe folgendes Ausgangssituation:
Hier in der Firma haben wir ein Wiki auf Java Basis im Einsatz (Tomcat wird mit ausgeliefert).
Dieses Wiki habe ich kürzlich auf einem Debian Lenny Server neu aufgesetzt.
Da zu Wartungsarbeiten gelegentlich das Wiki heruntergefahren wird (streng genommen der Tomcat),
haben wir uns entschlossen einen Apache vor den Tomcat zu schalten.
1) Soll der Apache die Zwangsumleitung von http -> https übernehmen.
2) Soll der Apache (mit Tomcat hatten wir da früher mal Probleme) das Thawte SSL Zertifikat bereitstellen.
3) Soll bei heruntergefahrenem Tomcat der Apache automatisch eine selbst definierte HTML Seite für den Fehler 503 anzeigen.
Was geht, was geht nicht?
Wenn ich im die Direktive ErrorDocument 503 [...] setze, dann funktioniert
a) Das weiterleiten auf eine externe URL
b) Die Ausgabe eines Textes wie z.B. "Die Webseite ist derzeit wegen Wartungsarbeiten offline"
c) Die Ausgabe des Apache Standardfehlercodes
Die Weiterleitung aller Anfragen vom Apache zum Tomcat funktioniert ebenfalls hervorragend.
Ebenso wie SSL Handling (in dieser Konfig abgeschaltet) und Zwangsumleitung von *:80 => *:443.
Was nicht funktioniert ist die Weiterleitung in ein lokales Verzeichnis in dem sich eine HTML Seite befindet.
Wenn ich dies probiere erhalte ich die Standard Fehlermeldung 503 sowie einen Zusatzhinweis:
Additionally, a 503 Service Temporarily Unavailable error was encountered while trying to use an ErrorDocument to handle the request.
Frage: Wie hinterlege ich auf dem lokalen Server eine Wartungswebseite, welche über ErrorDocument 503 erfolgreich aufgerufen wird?
Zum Verbinden von des Apache (2.2.X) und des Tomcats (6.0.X) setzen wir aus Performancegründen den aktuellsten mod_jk ein.
Die Konfig sieht wie folgt aus:
/etc/apache2/sites-enabled/tomcat
- Code: Select all
<VirtualHost *:80>
ServerName archivwiki.hlp.de
ServerAdmin wiki@hlp.de
JkMount /* worker1
JkMount /*.jsp worker1
DirectoryIndex index.jsp index.html
</VirtualHost>
/etc/apache2/workers.properties
- Code: Select all
worker.list=worker1
worker.worker1.host=localhost
worker.worker1.port=8009
worker.worker1.type=ajp13
/etc/apache2/apache2.conf
- Code: Select all
JkWorkersFile /etc/apache2/workers.properties
JkLogFile /var/log/apache2/mod_jk.log
JkLogLevel info
JkOptions +ForwardURICompatUnparsed
/usr/local/confluence-2.10.3-std/conf/server.xml
- Code: Select all
<Server port="8000" shutdown="SHUTDOWN" debug="0">
<Service name="Tomcat-Standalone">
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector" port="8080" minProcessors="5"
maxProcessors="75"
enableLookups="false" redirectPort="8443" acceptCount="10" debug="0" connectionTimeout="20000"
useURIValidationHack="false" URIEncoding="UTF-8"/>
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" minSpareThreads="5" maxThreads="256" protocol="AJP/1.3" />
<Engine name="Standalone" defaultHost="localhost" debug="0">
<Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="false">
<Context path="" docBase="../confluence" debug="0" reloadable="false">
<!-- Logger is deprecated in Tomcat 5.5. Logging configuration for Confluence is specified in confluence/WEB-INF/classes/log4j.properties -->
<Manager pathname="" />
</Context>
</Host>
</Engine>
</Service>
</Server>
EDIT:
Habe mittlerweile herausgefunden, dass es wenn ich mod Proxy verwenden würde mit folgender Ergänzung im virtual Host funktionieren müsste:
- Code: Select all
ErrorDocument 503 /error-documents/503.html
Alias /error-documents /path/to/error-docs
ProxyPass /error-documents !
Weiß jemand wie die unterste Zeile bei mod_jk aussehen müsste?
EDIT2:
Es hat sich gerade erledigt.
Nach 1 Tag suchen bin ich eben vom Schlauch runter gestiegen und habe den Befehl jkUnMount gefunden und benutzt.
- Code: Select all
<VirtualHost *:80>
ServerName archivwiki.hlp.de
ServerAdmin wiki@hlp.de
ErrorDocument 503 /wartung/wartung.html
Alias /wartung /usr/local/webseite/wartung
JkUnMount /wartung/* worker1
JkMount /* worker1
JkMount /*.jsp worker1
DirectoryIndex index.jsp index.html
</VirtualHost>
Damit funktioniert es.