Вопрос

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

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

Это было полезно?

Решение

Вы используете свойство error_page в конфигурации в nginx.

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

error_page 404 /404.html;

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

error_page 500 /500.html;

Другие советы

Вы можете настроить пользовательскую страницу ошибок для каждого блока местоположения в вашем 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 для реальных примеров в Интернете.

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

error_page 404 = /404.html;

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

error_page 404 /404.html;

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

https://serverfault.com/questions/295789/nginx -RETURN-корректные-Headers-с-обычая ошибочных документов

Параметр 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;

Например.

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

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

location ~ \.php {
    try_files $uri =404;
    ...
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top