wake-up-neo.com

Nginx - 404-Seite anpassen

Nginx + PHP (auf fastCGI) funktioniert hervorragend für mich. Wenn ich einen Pfad zu einer PHP Datei, die nicht existiert) eingebe, erhalte ich einfach eine "Keine Eingabe", anstatt die Standard-404-Fehlerseite (die für eine ungültige .html-Datei vorliegt) zu erhalten angegebene Datei. ".

Wie kann ich diese 404-Fehlerseite anpassen?

50
thomas55

Sie verwenden die error_page -Eigenschaft im nginx config .

Wenn Sie beispielsweise die 404-Fehlerseite auf /404.html Setzen möchten, verwenden Sie

error_page 404 /404.html;

Das Setzen der 500-Fehlerseite auf /500.html Ist genauso einfach wie:

error_page 500 /500.html;
38
WizKid

Sie können eine benutzerdefinierte Fehlerseite für jeden Speicherortblock in Ihrer nginx.conf oder eine globale Fehlerseite für die gesamte Site einrichten.

So leiten Sie zu einer einfachen 404-Seite weiter, die für einen bestimmten Standort nicht gefunden wurde:

location /my_blog {
    error_page    404 /blog_article_not_found.html;
}

Eine Seite mit 404 Seiten:

server {
    listen 80;
    error_page  404  /website_page_not_found.html;
    ...

Sie können Standardfehlercodes anhängen, um eine einzige Seite für verschiedene Fehlertypen zu erhalten:

location /my_blog {
    error_page 500 502 503 504 /server_error.html
}

Um zu einem völlig anderen Server umzuleiten, gehen Sie davon aus, dass Sie einen Upstream-Server namens server2 in Ihrem http-Abschnitt definiert haben:

upstream server2 {
    server 10.0.0.1:80;
}
server {
    location /my_blog {
        error_page    404 @try_server2;
    }
    location @try_server2 {
        proxy_pass http://server2;
    }

Das Handbuch kann Ihnen mehr Details geben, oder Sie können Google nach den Begriffen nginx.conf und error_page durchsuchen, um Beispiele aus der Praxis im Web zu finden.

108
Great Turtle

Sei vorsichtig mit der Syntax! Great Turtle hat sie synonym verwendet, aber:

error_page 404 = /404.html;

Gibt die Seite 404.html mit dem Statuscode 200 zurück (weil = das an diese Seite weitergeleitet hat)

error_page 404 /404.html;

Gibt die Seite 404.html mit einem (ursprünglichen) 404-Fehlercode zurück.

https://serverfault.com/questions/295789/nginx-return-correct-headers-with-custom-error-documents

31
dhr_p

Der Parameter "error_page" führt eine Umleitung durch und konvertiert die Anforderungsmethode in "GET". Es handelt sich nicht um eine benutzerdefinierte Antwortseite.

Die einfachste Lösung ist

     server{
         root /var/www/html;
         location ~ \.php {
            if (!-f $document_root/$fastcgi_script_name){
                return 404;
            }
            fastcgi_pass   127.0.0.1:9000;
            include fastcgi_params.default;
            fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;
        }

Übrigens, wenn Nginx den 404-Status verarbeiten soll, der von PHP Skripten zurückgegeben wird, müssen Sie hinzufügen

[fastcgi_intercept_errors][1] on;

Z.B.

     location ~ \.php {
            #...
            error_page  404   404.html;
            fastcgi_intercept_errors on;
         }
28

Diese Antworten werden nicht mehr empfohlen, da try_files In diesem Kontext schneller als if arbeitet. Fügen Sie einfach try_files In Ihren PHP-Adressblock ein, um zu testen, ob die Datei existiert, andernfalls geben Sie eine 404 zurück.

location ~ \.php {
    try_files $uri =404;
    ...
}
14
Isius