PEGU Consulting

Webdesign | Hosting | Support | Consulting

Weblog von PEGU Consulting

Dienstag, 2. November 2021 / 18:13

Nginx Fehlerseite mehrsprachig mit SSI

Abgelegt unter Linux — von Deborah White

Gastbeitrag von Deborah White

Disclaimer: Nachmachen auf eigene Gefahr!

Mehrsprachige Fehlerseiten, je nach Browser-Sprache mit Fallbacksprache Englisch, beispielhaft in Deutsch und Englisch. Das ganze wurde gestest auf einem Debian-System mit buster.

  1. Wir benötigen zunächst eine globale Konfiguration mit den Maps der Statustexte ('/etc/nginx/conf.d/error_text_maps.conf'). Diese muss mit direkt unter 'http' inkludiert werden. In Debian-basierten Systemen ist dies bereits vorkonfiguriert:
                  include /etc/nginx/conf.d/*.conf; 
  2. Die Konfiguration der Fehlerseiten für den jeweiligen Host ('/etc/nginx/snippets/error_pages.conf'). Diese muss unter jeder gewünscht Host-Konfiguration unter 'server' inkludiert werden:
                 include /etc/nginx/snippets/error_pages.conf; 
  3. Schließlich benötigen wir noch die HTML-Datei, um die Fehlerseite anzuzeigen ('/var/www/errordocs/error.html').
  4. Neustart

 

1. Globale Konfiguration mit den Maps der Statustexte

# /etc/nginx/conf.d/error_text_maps.conf
map $http_accept_language $language {
    default    en;
    ~de        de;
# here you can add more languages
#    ~fr        fr;
}

map $status $default_status_text {
  400 'Bad Request' ;
  401 'Authorization Required';
  402 'Payment Required';
  403 'Forbidden';
  404 'Not Found';
  405 'Method Not Allowed';
  406 'Not Acceptable';
  407 'Proxy Authentication Required';
  408 'Request Timeout';
  409 'Conflict';
  410 'Gone';
  411 'Length Required';
  412 'Precondition Failed';
  413 'Payload Too Large';
  414 'Request-URI Too Long';
  415 'Unsupported Media Type';
  416 'Range Not Satisfiable';
  417 'Expectation Failed';
  418 'I\'m a teapot';
  421 'Misdirected Request';
  422 'Unprocessable Entity';
  423 'Locked';
  424 'Failed Dependency';
  425 'Too Early';
  426 'Upgrade Required';
  428 'Precondition Required';
  429 'Too Many Requests';
  431 'Request Header Fields Too Large';
  451 'Unavailable For Legal Reasons';
  500 'Internal Server Error';
  501 'Not Implemented';
  502 'Bad Gateway';
  503 'Service Temporarily Unavailable';
  504 'Gateway Timeout';
  505 'HTTP Version Not Supported';
  506 'Variant Also Negotiates';
  507 'Insufficient Storage';
  508 'Loop Detected';
  510 'Not Extended';
  511 'Network Authentication Required';
  default 'Something went wrong';
}

map $status$language $status_text {
  default $default_status_text;

  400de 'Ungültige Anforderung';
  401de 'Autorisation benötigt';
  403de 'Keine Berechtigung';
  404de 'Seite nicht gefunden';
  405de 'Methode nicht erlaubt';
  406de 'Nicht akzeptiert.';
  407de 'Proxy-Autorisation benötigt';
  412de 'Voraussetzung nicht erfüllt';
  414de 'URL zu lang';
  415de 'Nicht unterstützter Medientyp';
  500de 'Interner Serverfehler';
  501de 'Nicht implementiert';
  502de 'Gateway-Fehler';
  503de 'Service nicht verfügbar';
}


map $status $default_status_message {
  400 'Your browser sent a request that this server could not understand.';
  401 'This server could not verify that you are authorized to access the document requested.  Either you supplied the wrong credentials (e.g., bad password), or your browser doesn\'t understand how to supply';
  403 'You do not have permission to access this document.';
  404 'The requested document was not found on this server.';
  405 'The HTTP verb used to access this page is not allowed.';
  406 'Client browser does not accept the MIME type of the requested page.';
  407 'You must be authenticated by a proxy server before the Web server can execute your request.';
  412 'The request was not completed due to preconditions that are set in the request header.';
  414 'The Web server is refusing to service the request because the requested URL address is too long.';
  415 'The Web server cannot service the request because the requested file is in a format that the server is configured not to download';
  500 'The server encountered an internal error or misconfiguration and was unable to complete your request.';
  501 'The page you are looking for cannot be displayed because a header value in the request does not match certain configuration settings on the Web server.';
  502 'Web server received an invalid response while acting as a gateway or proxy server.';
  503 'The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.';
}

map $status$language $status_message {
  default $default_status_message;
  400de 'Ungültige Anforderung", "Der Server konnte die Anfrage nicht beantworteten.';
  401de 'Der Webserver kann nicht feststellen, dass Sie eine Zugriffsberechtigung auf das angeforderte Dokument besitzen. Entweder haben Sie falsche Zugangsdaten eingegeben, oder Ihr Browser kann die angeforderten Zugangsdaten nicht bereitstellen.';
  403de 'Der Zugriff auf die gewünschten Daten ist nicht erlaubt.';
  404de 'Leider konnte die angeforderte Seite nicht auf unserem Server gefunden werden.';
  405de 'Die HTTP-Anforderung für dieses Dokument ist nicht erlaubt.';
  406de 'Ihr Browser akzeptiert den MIME-Typ des angeforderten Dokuments nicht.';
  407de 'Sie müssen Sich am Proxy-Server authentifizieren, bevor der Webserver Ihre Anforderung bearbeiten kann.';
  412de 'Die Anfrage konnte nicht vollständig bearbeitet werden, weil mindestens eine Voraussetzung nicht erfüllt ist.';
  414de 'Der Webserver kann die Anfrage nicht bearbeiten, weil die Anfrage-URL zu lang ist.';
  415de 'Der Webserver kann die Anfrage nicht bearbeiten, weil das angeforderte Dokumenten ein unbekanntes Format hat';
  500de 'Es ist ein interner Serverfehler aufgetreten.';
  501de 'Die Anfrage enthält Anforderungen, die der Server nicht bearbeiten kann.';
  502de 'Bearbeitung der Anfrage an einen anderen Server fehlgeschlagen.';
  503de 'Der Service ist zur Zeit nicht verfügbar, bitte versuchen Sie es später noch einmal.';
}

2. Die Konfiguration der Fehlerseiten für den jeweiligen Host

# /etc/nginx/snippets/error_pages.conf:

error_page 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 421 422 423 424 425 426 428 429 431 451 500 501 502 503 504 505 506 507 508 510 511 /error.html;

location = /error.html {

  ssi on;
  internal;

  # set to on in production
  ssi_silent_errors on;
  auth_basic off;
  root /var/www/errordocs;
  index    error.html;

}

3. Fehlerseite (Beispiel)

# /var/www/errordocs/error.html (Beispiel):
<!--# set var="status_lang" value="$language" --><!--# if expr="$default_status_text = $status_text" --><!--# set var="status_lang" value="en" --><!--# endif --><html lang="<!--# echo var="status_lang" -->">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title><!--# echo var="status" default="" --> <!--# echo var="status_text" default="Something went wrong" --></title>

    <style>
        body, body * {
            font-family:sans-serif, Arial, Helvetica,serif;
            color: #444444;
            font-size: 11pt;
        }
        p {
            text-align: justify;
        }
        h3 {
            font-size: 14pt;
            text-transform: uppercase;
            color: #CC0000;
        }
        a {
            color: #666666;
        }
        a:hover {
            color: #888888;
        }
        body {
            background-color: white;
            margin: 0.5em;
            padding:0.5em;
        }
    </style>

</head>

<body>
<div class="infoblock">
<h3><!--# echo var="status" default="" --> <!--# echo var="status_text" default="Something went wrong" --></h3>
<!--# 
        set var="msg_lang" value="$language" --><!--# 
        if expr="$default_status_message = $status_message" --><!--# 
        set var="msg_lang" value="en" --><!--# 
endif -->
<!--# 
if expr="$status_message" 
--><p lang="<!--# echo var="msg_lang" -->"><!--# echo var="status_message" --></p><!--# 
endif --></div>
<hr />
Domain <!--# echo var="http_host" default="(unknown)" -->

</body>
</html>

4. Neustart

# debian
service nginx configtest && service nginx reload
Zurück
Seiten
  • Home
  • Impressum
  • Nutzungsbedingungen
  • Datenschutzerklärung
  • Kontakt
  • Webseite
Kategorien
  • Allgemein (65)
  • PEGU intern (25)
  • Computer-News (49)
    • Hardware (8)
    • Software (61)
    • Spiele (34)
    • Internet (39)
    • Diverses (5)
  • Shortcuts (8)
  • Subjektives (72)
  • System (23)
  • Mac-Welten (26)
  • Mobiles Leben (62)
  • TypoScript-Schnipsel (4)
  • Games (19)
  • Linux (32)
  • Satire (4)
  • Im Test (51)
  • Entwicklung (1)
    • Tipps und Tricks (0)
    • JavaScript / Vue Schnipsel (5)
Archiv
  • Mai 2023 (5)
  • Dezember 2022 (1)
  • November 2021 (2)
  • September 2021 (1)
  • August 2021 (2)
  • Juli 2021 (1)
  • Juni 2021 (4)
  • Mai 2021 (9)
  • April 2021 (3)
  • März 2021 (2)
  • Februar 2021 (4)
  • Januar 2021 (5)
  • Dezember 2020 (8)
  • November 2020 (7)
  • September 2020 (1)
  • Juli 2020 (5)
  • Juni 2020 (6)
  • Mai 2020 (8)
  • Dezember 2018 (1)
  • Juli 2018 (1)
  • Mai 2018 (1)
  • April 2018 (1)
  • Februar 2018 (1)
  • Januar 2018 (2)
  • Dezember 2017 (2)
  • November 2017 (3)
  • Oktober 2017 (1)
  • März 2017 (2)
  • Februar 2017 (3)
  • Januar 2017 (2)
  • Dezember 2016 (2)
  • November 2016 (1)
  • Oktober 2016 (1)
  • September 2016 (2)
  • August 2016 (2)
  • Juli 2016 (2)
  • Mai 2016 (3)
  • April 2016 (4)
  • März 2016 (2)
  • Februar 2016 (4)
  • Januar 2016 (5)
  • Dezember 2015 (3)
  • November 2015 (2)
  • Oktober 2015 (1)
  • September 2015 (1)
  • August 2015 (2)
  • Juli 2015 (2)
  • Juni 2015 (2)
  • Mai 2015 (4)
  • April 2015 (11)
  • März 2015 (6)
  • Februar 2015 (2)
  • Januar 2015 (9)
  • Dezember 2014 (7)
  • November 2014 (4)
  • Oktober 2014 (7)
  • September 2014 (9)
  • August 2014 (10)
  • Juli 2014 (2)
  • Mai 2014 (2)
  • April 2014 (15)
  • März 2014 (8)
  • Februar 2014 (12)
  • Januar 2014 (3)
  • Dezember 2013 (3)
  • November 2013 (8)
  • Oktober 2013 (4)
  • September 2013 (7)
  • August 2013 (3)
  • Juli 2013 (6)
  • Juni 2013 (7)
  • Mai 2013 (6)
  • April 2013 (6)
  • März 2013 (13)
  • Februar 2013 (10)
  • Januar 2013 (7)
  • Dezember 2012 (5)
  • November 2012 (5)
  • Oktober 2012 (5)
  • September 2012 (2)
  • August 2012 (5)
  • Juli 2012 (10)
  • Juni 2012 (3)
  • April 2012 (1)
  • März 2012 (3)
  • Februar 2012 (3)
  • Januar 2012 (1)
  • Dezember 2011 (2)
  • November 2011 (2)
  • Oktober 2011 (5)
  • September 2011 (5)
  • August 2011 (4)
  • Juli 2011 (2)
  • Juni 2011 (2)
  • Mai 2011 (7)
  • April 2011 (12)
  • März 2011 (9)
  • Februar 2011 (2)
  • Dezember 2010 (1)
  • September 2010 (3)
  • Juni 2010 (1)
  • Mai 2010 (2)
  • Februar 2010 (3)
  • Januar 2010 (3)
  • Dezember 2009 (5)
  • November 2009 (1)
  • Juli 2009 (1)
  • Mai 2009 (2)
  • April 2009 (1)
  • März 2009 (2)
  • Februar 2009 (3)
  • Dezember 2008 (1)
  • Oktober 2008 (1)
  • August 2008 (1)
  • Juni 2008 (1)
  • Mai 2008 (2)
  • April 2008 (6)
  • März 2008 (3)
  • Februar 2008 (2)
  • Januar 2008 (4)
  • Dezember 2007 (6)
  • November 2007 (1)
  • Oktober 2007 (2)
  • September 2007 (1)
  • August 2007 (3)
  • Juli 2007 (5)
  • Mai 2007 (1)
  • April 2007 (6)
  • März 2007 (5)
  • Februar 2007 (4)
  • Januar 2007 (2)
  • Dezember 2006 (5)
  • November 2006 (2)
  • Oktober 2006 (5)
  • September 2006 (13)
  • März 2004 (1)
  • Oktober 2003 (1)
  • April 2003 (1)
  • Februar 2003 (1)
Blogroll
  • PEGU Webseite
  • Schriftsteller G. Arentzen
Feeds
  • RSS 2
© by PEGU Consulting, P. Arentzen — Design & Realisierung by PEGU Consulting — Powered by TYPO3