Eigene Fehlerseiten unter nginx realisieren

Immer, wenn auf einem Server etwas nicht so läuft, wie es soll, macht der Webserver mit einer Fehlermeldung auf sich aufmerksam. Diese Fehlermeldungen sehen eigentlich recht unschön aus, bestehen sie doch im wesentlichen nur aus einem Zahlencode und einer oft wenig aussagenden Fehlermeldung.

Gerade Laien können mit diesen Meldungen nicht wirklich viel anfangen und werden die Website u.U. gar nicht wieder erneut aufrufen, da die Seite ja einfach “kaputt” sein könnte. Was liegt also näher, als eigene Fehlerseiten zu erstellen, die im Fehlerfall einspringen und erklären, was genau jetzt schief gelaufen ist? Mit dem nginx-Webserver ist das keine Hexerei.

Zunächst brauchen wir natürlich einen Satz Fehlerseiten, die wir im Fehlerfall anzeigen wollen. Ich habe mich einmal hingesetzt und mit meinen quasi nicht vorhandenen CSS-Kenntnissen ein paar simple Fehlerseiten zusammengestrickt, die die gängigsten Fehler abdecken. Eine Fehlerseite für 404er-Fehler ist übriends nicht dabei, da gängige CMS solche Fehler selbst behandeln. Bei Bedarf lässt sich eine solche Seite natürlich anhand der Vorlagen leicht nachbauen.

Nach dem Download des ZIP-Archivs legen wir den Inhalt an einem beliebigen Ort auf dem Server ab. Am besten sollte dieser Ort jedoch außerhalb des Web-Roots liegen, damit Crawler die Seite nicht indizieren und die Seiten durch die Benutzer auch nicht manuell aufgerufen werden können. Ein netter Nebeneffekt ist auch noch, dass andere Nutzer auf dem Server diese Seiten ebenfalls nutzen können, da diese optimalerweise in einem gemeinsam genutzten Ordner liegen. Ich empfehle für Debian-basierte Systeme mit dem nginx-Webserver den Ort /usr/share/nginx/errorpages. Natürlich muss dieser Ordner durch den Webserver lesbar sein, im Zweifelsfall also den CHMOD anpassen, 755 ist in diesem Fall problemlos möglich.

Nachdem wir die Dateien unter dem gewünschten Ort abgespeichert haben, öffnen wir die nginx-Konfiguration für die zu bearbeitende Website (oder die globale nginx-Konfigurationsdatei, wenn die Fehlerseiten unter allen auf dem Server gehosteten Websites angezeigt werden sollen) in einem Editor unserer Wahl, in welchem wir dann die Fehlerseiten über den error_page-Befehl definieren:

server {
        server_name example.com www.example.com;
        root /var/www/example.com/htdocs;
        [...]
        error_page 401 /401error.html;
        error_page 403 /403error.html;
        error_page 502 /502error.html;
        error_page 500 /500error.html;
        error_page 503 /503error.html;
        error_page 504 /504error.html;

Die Zahl nach dem error_page-Befehl gibt den zu ersetzenden Fehlercode an; die Dateien /xxxerror.html sind einfach die Dateinamen der Fehlerseiten. Wichtig ist, dass hier nur der Dateiname angegeben wird und kein absoluter Pfad! Damit der Server die Fehlerseiten auch im richtigen Pfad sucht, geben wir im nächsten Schritt den Pfad über die location-Direktive bekannt:

        location ~* ^/(401|403|502|503|504|500)error.html$ {
                root /usr/share/nginx/errorpages/;
                internal;
        }

Die erste Codezeile definiert, dass die in der zweiten Codezeile folgende root-Direktive für alle Dateien gilt, die nach dem Muster Fehlercode + error.html aufgebaut sind. Die zweite Codezeile gibt nun den absoluten Pfad zu den eigenen Fehlerseiten an. Dieser Pfad muss natürlich ggf. angepasst werden, wenn nicht die gleichen Pfade wie in diesem Beispiel verwendet werden. Dies gilt natürlich auch für die Dateinamen der Fehlerseiten.Die dritte Codezeile verhindert, dass die Nutzer die Fehlerseiten einfach über http://example.com/401error.html aufrufen können.

Anschließend speichern wir die veränderte Konfigurationsdatei und starten den Webserver mit einem beherzten service nginx restart neu. Die neuen Fehlerseiten sollten jetzt funktionieren, was man leicht überprüfen kann, in dem man den PHP-Prozessmanager (PHP-FPM, PHP-CGI…) beendet und die Seite neu aufruft. Alternativ kann man natürlich auch ein leeres Verzeichnis erstellen und den Browser dahin navigieren, um einen 403-Fehler zu provozieren. Auf horrorkid.in sieht die Fehlerseite für 403er-Fehler z.B. so aus.

Natürlich darf der Text der Fehlerseiten nach eigenen Bedürfnissen angepasst, erweitert und weiterverbreitet werden, da er unter der CC-Lizenz steht. Vor dem Produktiveinsatz sollte man in den Fehlerseiten “Administrator” noch durch seinen eigenen (Nick)Namen ersetzen und ggf. eine echte E-Mail-Adresse eintragen oder alternative Kontaktmöglichkeiten angeben.

So long,
Horrorkid

Kommentar schreiben


Hinweis - Du kannst dies benutzenHTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>