Nginx - настройка страницы 404 - PullRequest
48 голосов
/ 21 июня 2009

Nginx + PHP (на fastCGI) прекрасно работает для меня. Когда я ввожу путь к файлу PHP, который не существует, вместо того, чтобы получить страницу ошибки 404 по умолчанию (которая относится к любому недопустимому файлу .html), я просто получаю «Файл ввода не указан».

Как я могу настроить эту страницу ошибки 404?

Ответы [ 5 ]

106 голосов
/ 07 июля 2009

Вы можете настроить пользовательскую страницу ошибок для каждого блока местоположения в вашем nginx.conf или глобальную страницу ошибок для сайта в целом.

Чтобы перенаправить на простую страницу 404 не найден для определенного местоположения:

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

Ширина сайта 404 страницы:

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

Вы можете добавить стандартные коды ошибок вместе, чтобы иметь одну страницу для нескольких типов ошибок:

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

Чтобы перенаправить на совершенно другой сервер, предполагая, что в разделе http определен вышестоящий сервер с именем server2:

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

Руководство может предоставить вам более подробную информацию, или вы можете найти в Google термины nginx.conf и error_page, чтобы найти примеры из реальной жизни в Интернете.

38 голосов
/ 21 июня 2009

Вы используете свойство error_page в nginx config .

Например, если вы намереваетесь установить для страницы ошибки 404 значение /404.html, используйте

error_page 404 /404.html;

Установить страницу ошибки 500 на /500.html так же просто, как:

error_page 500 /500.html;
30 голосов
/ 01 октября 2013

Будьте осторожны с синтаксисом! Великая Черепаха использовала их взаимозаменяемо, но:

error_page 404 = /404.html;

Вернет страницу 404.html с кодом состояния 200 (потому что = передал это на эту страницу)

error_page 404 /404.html;

Вернет страницу 404.html с (исходным) кодом ошибки 404.

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

28 голосов
/ 09 мая 2011

Параметр «error_page» выполняет перенаправление, преобразовывая метод запроса в «GET», это не пользовательская страница ответа.

Самое простое решение -

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

Кстати, если вы хотите, чтобы Nginx обрабатывал статус 404, возвращаемый PHP-скриптами, вам нужно добавить

[fastcgi_intercept_errors][1] on;

1011 * Е.Г. *

     location ~ \.php {
            #...
            error_page  404   404.html;
            fastcgi_intercept_errors on;
         }
14 голосов
/ 03 августа 2012

Эти ответы больше не рекомендуются, поскольку try_files в этом контексте работает быстрее, чем if. Просто добавьте try_files в свой блок местоположения php, чтобы проверить, существует ли файл, иначе верните 404.

location ~ \.php {
    try_files $uri =404;
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...