Nginx - Pass alle 404-Fehler zurück zu PHP-FPM für benutzerdefinierte Fehlerseite Verarbeitung

Ich weiß, das wurde schon tausendmal gefragt, aber all die Antworten, die ich fand einfach keine Arbeit (für mich oder in der Regel die original OP der Fragen)... Also, ich werde versuchen zu erklären, das problem so gut wie ich nur kann und ich hoffe, wir bekommen es für mich arbeiten, und für die anderen, die haben vorher gefragt.

Meiner Nginx-config (mit vielen anderen irrelevanten Sachen zu entfernen) ist wie folgt:

http {
    # Config from here removed

    server {
            listen 80;
            listen 443 ssl;
            server_name mydomain.co.uk;

            ssl_certificate /xxxxxxx.crt;
            ssl_certificate_key /xxxxxxx.key;

            # Custom error pages
            root /var/www/viovet_frontend;
            error_page 404 = /error404.php;

            # Any simple .php page
            location ~ \.php$ {
                    root /var/www/xxxxxx;
                    #index index.php index.html;

                    include /etc/nginx/fastcgi.conf;
                    fastcgi_pass phpfastcgiservers;
                    include fastcgi_params;

                    fastcgi_intercept_errors on;
            }

            # Lots more config and re-write rules here removed
    }

    upstream phpfastcgiservers {
            server xxxxx1:9001;
            server xxxxx2:9001;
            server xxxxx3:9001;
            fair;
    }
}

Alles was ich versuche zu tun bekommen, Nginx, alle zu fangen 404 und senden Sie zurück zu PHP-FPM über location ~ \.php$ um eine benutzerdefinierte Fehlerseite, die dem Benutzer angezeigt, aber ich bekomme immer die standard Nginx error-Seite.

Den folgenden urls sollten alle zeigen die Ausgabe von mydomain.co.uk/error404.php:

  • mydomain.co.uk/someNonExistantFile (didn ' T match any location-Blöcke)
  • mydomain.co.uk/someMissingFile.php (abgestimmt .php-Datei Speicherort blockieren aber die Datei nicht vorhanden ist)

Aber Sie zeigen tatsächlich die standard Nginx 404-Seite. Wenn die location ~ \.php$ gibt einen anderen Fehler-code 404 (e.g 5xx) dann werden wir uns nicht engagieren wollen, einfach nur wieder die Inhalte und Header, die FastCGI kehrte in den ersten Platz.

Ich hoffe das macht Sinn und mir kann jemand helfen. Vielen Dank im Voraus.

EDIT: ich habe versucht, indem recursive_error_pages on; auf die Linie nach # Custom error pages aber diese tatsächlich bewirkt, dass alle Nginx 404 Not Found Fehler zu Nginx 500 Internal Server Error Fehler.

EDIT: Hinzufügen von weiteren Dateien:
/etc/nginx/fastcgi.conf

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

fastcgi_params

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

Ich denke, dass ich wahrscheinlich nicht brauchen diese beiden sowieso! 😉

  • Versuchen Sie, root /var/www/xxxx außerhalb Ihres Standorts ~php.
  • PHP-FPM und Nginx sind auf verschiedenen Maschinen. Dies zu tun (allein) nicht helfen, Nginx, schicken Sie es zurück zu PHP-FPM.
InformationsquelleAutor Luke Cousins | 2014-04-16
Schreibe einen Kommentar