środa, 22 kwietnia 2009

Apache 2.2 + Apache Tomcat + ErrorDocument

Opis sytuacji:
Serwer Apache HTTP Server z przodu, za nim Apache Tomcat 6.0.18. Wszystko połączone ze sobą za pomocą mod_jk.

Problem:
W przypadku braku połączenia z Tomcatem należy wyświetlić ładny komunikat o tymczasowych problemach i próbować odświeżyć stronę co 10 sekund w celu sprawdzenia czy Tomcat nie jest ponownie dostępny.

Rozwiązanie:
Mogłoby się wydawać, że banalne. W pliku konfiguracyjny Apache HTTP ustalenie ErrorDocument i po sprawie. Niestety nie do końca tak jest.
Ale od początku. Musimy przekazać do strony obsługującej stronę błędu parametry. Odpada nam więc wykorzystanie ErrorDocument w postaci bezwględnego adresu. Jak więc to zrobić?
  1. Przygotujemy alias /error wskazujący na katalog /var/www/error

    <Directory "/var/www/error">
    AllowOverride None
    Order allow,deny
    Allow from all
    </Directory>

    Alias /error /var/www/error



  2. W katalogu /var/www/error tworzymy plik 503.php o następującej zawartości

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" >
    <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <meta http-equiv="Refresh" CONTENT="10; URL=http://<?php echo $_SERVER['HTTP_HOST'];?>">
    <title>Serwer Tomcat tymczasowo niedostępny - proszę czekać</title>
    <style type="text/css" media="all">
    h1
    {
    color: red;
    }
    </style>
    </head>
    <body>
    <h1>Serwer Tomcat tymczasowo niedostępny - proszę czekać</h1>
    </body>
    </html>



  3. Musimy poinformować serwer http żeby pliki *.php nie były przekazywane do Tomcata. Jest to kluczowa rzecz, z którą miałem największy problem.

    SetEnvIf Request_URI "/*.php" no-jk



  4. Pozostało już tylko wskazać dokument, który ma być wywoływane w przypadku błędu 503.

    ErrorDocument 503 /error/503.php


Brak komentarzy: