Nginx-dostosowywanie strony 404

Nginx + PHP (na fastCGI) działa dla mnie świetnie. Kiedy wprowadzam ścieżkę do pliku PHP, który nie istnieje, zamiast uzyskać domyślną stronę błędu 404 (która jest dla każdego nieprawidłowego.plik html), po prostu dostaję " Nie podano pliku wejściowego.".

Jak Mogę dostosować tę stronę błędu 404?

Author: James T Snell, 2009-06-21

5 answers

W tym celu należy użyć właściwości error_page w konfiguracji Nginx .

Na przykład, jeśli chcesz ustawić stronę błędu 404 na /404.html, Użyj

error_page 404 /404.html;

Ustawienie strony błędu 500 na /500.html jest tak samo proste jak:

error_page 500 /500.html;
 46
Author: WizKid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-28 16:52:18

Możesz skonfigurować niestandardową stronę błędu dla każdego bloku lokalizacji w nginx.conf, czyli globalna strona błędu dla witryny jako całości.

Aby przekierować na prostą stronę 404 nie znaleziono dla konkretnej lokalizacji:

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

A site wide 404 page:

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

Możesz dołączyć standardowe kody błędów razem, aby mieć jedną stronę dla kilku typów błędów:

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

Aby przekierować na zupełnie inny serwer, zakładając, że masz serwer o nazwie server2 zdefiniowany w Twoim http sekcja:

upstream server2 {
    server 10.0.0.1:80;
}
server {
    location /my_blog {
        error_page    404 @try_server2;
    }
    location @try_server2 {
        proxy_pass http://server2;
    }
Więcej informacji na ten temat znajdziesz w instrukcji obsługi nginx.conf i error_page dla rzeczywistych przykładów w sieci.
 117
Author: Great Turtle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-22 18:19:16

Uważaj na składnię! Wielki żółw używał ich zamiennie, ale:

error_page 404 = /404.html;

Zwróci 404.strona html o kodzie stanu 200 (ponieważ = przekazał to tej stronie)

error_page 404 /404.html;

Zwróci 404.strona html z (oryginalnym) kodem błędu 404.

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

 37
Author: dhr_p,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-13 12:13:44

Parametr "error_page" powoduje przekierowanie, konwertując metodę żądania NA "GET", nie jest to niestandardowa strona odpowiedzi.

Najprostszym rozwiązaniem jest

     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;
        }

Przy okazji, jeśli chcesz, aby Nginx przetwarzał status 404 zwracany przez skrypty PHP, musisz dodać

[fastcgi_intercept_errors][1] on;

Np.

     location ~ \.php {
            #...
            error_page  404   404.html;
            fastcgi_intercept_errors on;
         }
 29
Author: Grigori Kochanov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-03 09:46:04

Te odpowiedzi nie są już zalecane, ponieważ try_files działa szybciej niż if w tym kontekście. Po prostu dodaj try_files w bloku lokalizacji php, aby sprawdzić, czy plik istnieje, w przeciwnym razie zwróć 404.

location ~ \.php {
    try_files $uri =404;
    ...
}
 17
Author: Isius,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-02 21:11:33