So konfigurieren Sie Apache für die Verwendung benutzerdefinierter Fehlerseiten unter Ubuntu 14.04

Einführung

Apache ist der beliebteste Webserver der Welt. Es ist gut unterstützt, funktionsreich und flexibel. Beim Entwerfen Ihrer Webseiten ist es häufig hilfreich, jeden Inhalt anzupassen, den Ihre Benutzer sehen. Dies schließt Fehlerseiten für den Fall ein, dass Inhalte angefordert werden, die nicht verfügbar sind. In diesem Handbuch wird gezeigt, wie Sie Apache für die Verwendung benutzerdefinierter Fehlerseiten unter Ubuntu 14.04 konfigurieren.

Voraussetzungen

Um mit diesem Handbuch beginnen zu können, benötigen Sie einen Benutzer ohne Rootberechtigung mit den Rechten "+ sudo +". Sie können einen Benutzer dieses Typs einrichten, indem Sie unserem initial setup guide for Ubuntu 14.04 folgen. . Außerdem muss Apache auf Ihrem System installiert sein. Erfahren Sie, wie Sie dies einrichten, indem Sie dem ersten Schritt von https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-ubuntu-14- folgen. 04 [dieser Leitfaden].

Erstellen Ihrer benutzerdefinierten Fehlerseiten

Zu Demonstrationszwecken erstellen wir einige benutzerdefinierte Fehlerseiten, Ihre benutzerdefinierten Seiten unterscheiden sich jedoch offensichtlich.

Wir werden unsere benutzerdefinierten Fehlerseiten in das Verzeichnis "+ / var / www / html" stellen, in dem die Installation von Ubuntu Apache das Standard-Dokumentenstammverzeichnis setzt. Wir erstellen eine Seite für 404-Fehler mit dem Namen "+ custom_404.html " und eine Seite für allgemeine 500-Level-Fehler mit dem Namen " custom_50x.html +". Sie können die folgenden Zeilen verwenden, wenn Sie nur testen. Andernfalls platzieren Sie Ihre eigenen Inhalte an folgenden Orten:

echo "<h1 style='color:red'>Error 404: Not found :-(</h1>" | sudo tee /var/www/html/custom_404.html
echo "<p>I have no idea where that file is, sorry.  Are you sure you typed in the correct URL?</p>" | sudo tee -a /var/www/html/custom_404.html
echo "<h1>Oops! Something went wrong...</h1>" | sudo tee /var/www/html/custom_50x.html
echo "<p>We seem to be having some technical difficulties. Hang tight.</p>" | sudo tee -a /var/www/html/custom_50x.html

Wir haben jetzt zwei benutzerdefinierte Fehlerseiten, die wir bedienen können, wenn Clientanforderungen zu unterschiedlichen Fehlern führen.

Konfigurieren von Apache zur Verwendung Ihrer Fehlerseiten

Jetzt müssen wir Apache nur noch mitteilen, dass diese Seiten verwendet werden sollen, wenn die richtigen Fehlerbedingungen auftreten. Öffnen Sie die virtuelle Hostdatei im Verzeichnis "+ / etc / apache2 / sites-enabled ", das Sie konfigurieren möchten. Wir verwenden die Standard-Serverblockdatei mit dem Namen " 000-default.conf +". Sie sollten jedoch Ihre eigenen Serverblöcke anpassen, wenn Sie eine nicht standardmäßige Datei verwenden:

sudo nano /etc/apache2/sites-enabled/000-default.conf

Wir können Apache jetzt auf unsere benutzerdefinierten Fehlerseiten verweisen.

Direkte Fehler auf den richtigen benutzerdefinierten Seiten

Wir können die Direktive "+ ErrorDocument +" verwenden, um jeden Fehlertyp einer zugeordneten Fehlerseite zuzuordnen. Dies kann innerhalb des aktuell definierten virtuellen Hosts eingestellt werden. Grundsätzlich müssen wir nur den http-Statuscode für jeden Fehler der Seite zuordnen, die bei dessen Auftreten geliefert werden soll.

In unserem Beispiel sieht die Fehlerzuordnung folgendermaßen aus:

/etc/apache2/sites-enabled/000-default.conf

<VirtualHost *:80>
   ServerAdmin webmaster@localhost
   DocumentRoot /var/www/html

   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined






</VirtualHost>

Diese Änderung allein reicht aus, um die benutzerdefinierten Fehlerseiten zu bedienen, wenn die angegebenen Fehler auftreten.

Wir werden jedoch einen zusätzlichen Satz von Konfigurationen hinzufügen, damit unsere Fehlerseiten nicht direkt von Clients angefordert werden können. Dies kann einige seltsame Situationen verhindern, in denen der Text einer Seite auf einen Fehler verweist, der http-Status jedoch "200" lautet (was auf eine erfolgreiche Anforderung hinweist).

Antworten Sie mit 404, wenn Fehlerseiten direkt angefordert werden

Um dieses Verhalten zu implementieren, müssen wir für jede unserer benutzerdefinierten Seiten einen "+ Files " - Block hinzufügen. Im Inneren können wir testen, ob die Umgebungsvariable ` REDIRECT_STATUS ` gesetzt ist. Dies sollte nur gesetzt werden, wenn die Direktive " ErrorDocument +" eine Anfrage verarbeitet. Wenn die Umgebungsvariable leer ist, wird ein 404-Fehler ausgegeben:

/etc/apache2/sites-enabled/000-default.conf

<VirtualHost *:80>

   . . .

   ErrorDocument 404 /custom_404.html
   ErrorDocument 500 /custom_50x.html
   ErrorDocument 502 /custom_50x.html
   ErrorDocument 503 /custom_50x.html
   ErrorDocument 504 /custom_50x.html












</VirtualHost>

Wenn die Fehlerseiten direkt von Clients angefordert werden, tritt ein 404-Fehler auf, da nicht die richtige Umgebungsvariable festgelegt ist.

Richten Sie das Testen auf 500-Level-Fehler ein

Wir können leicht 404-Fehler erzeugen, um unsere Konfiguration zu testen, indem wir nicht vorhandene Inhalte anfordern. Um die 500-Level-Fehler zu testen, müssen wir einen Dummy-Proxy-Pass einrichten, damit wir sicherstellen können, dass die richtigen Seiten zurückgegeben werden.

Fügen Sie eine Anweisung "+ ProxyPass " am unteren Rand des virtuellen Hosts hinzu. Senden Sie Anforderungen für " / proxytest +" an Port 9000 auf dem lokalen Computer (auf dem kein Dienst ausgeführt wird):

/etc/apache2/sites-enabled/000-default.conf

<VirtualHost *:80>

   . . .

   ErrorDocument 404 /custom_404.html
   ErrorDocument 500 /custom_50x.html
   ErrorDocument 502 /custom_50x.html
   ErrorDocument 503 /custom_50x.html
   ErrorDocument 504 /custom_50x.html

   <Files "custom_404.html">
       <If "-z %{ENV:REDIRECT_STATUS}">
           RedirectMatch 404 ^/custom_404.html$
       </If>
   </Files>

   <Files "custom_50x.html">
       <If "-z %{ENV:REDIRECT_STATUS}">
           RedirectMatch 404 ^/custom_50x.html$
       </If>
   </Files>


</VirtualHost>

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Aktivieren Sie nun die Module "+ mod_proxy " und " mod_proxy_http +", indem Sie Folgendes eingeben:

sudo a2enmod proxy
sudo a2enmod proxy_http

Starten Sie Apache neu und testen Sie Ihre Seiten

Testen Sie Ihre Konfigurationsdatei auf Syntaxfehler, indem Sie Folgendes eingeben:

sudo apache2ctl configtest

Beheben Sie alle gemeldeten Probleme. Wenn Ihre Dateien keine Syntaxfehler enthalten, starten Sie Apache neu, indem Sie Folgendes eingeben:

sudo service apache2 restart

Wenn Sie nun die Domain oder IP-Adresse Ihres Servers aufrufen und eine nicht vorhandene Datei anfordern, sollte die von uns eingerichtete 404-Seite angezeigt werden:

http:///thiswillerror

Wenn Sie zu dem Ort gehen, den wir für den Dummy-Proxy-Pass eingerichtet haben, wird auf unserer benutzerdefinierten Seite mit 500 Stufen der Fehler "503 Service nicht verfügbar" angezeigt:

http:///proxytest

Sie können jetzt zurückgehen und die gefälschte Proxy-Pass-Zeile aus Ihrer Apache-Konfiguration entfernen. Sie können die Proxy-Module deaktivieren, wenn Sie sie nicht an anderer Stelle verwenden müssen:

sudo a2dismod proxy
sudo a2dismod proxy_http

Starten Sie den Server erneut, um diese Änderungen zu implementieren:

sudo service apache2 restart

Fazit

Sie sollten jetzt benutzerdefinierte Fehlerseiten für Ihre Site bereitstellen. Dies ist eine einfache Möglichkeit, die Benutzererfahrung zu personalisieren, auch wenn Probleme auftreten. Ein Vorschlag für diese Seiten ist die Angabe von Links zu Orten, an denen sie Hilfe oder weitere Informationen erhalten können. Wenn Sie dies tun, stellen Sie sicher, dass auf die Verbindungsziele zugegriffen werden kann, auch wenn die zugehörigen Fehler auftreten.