Nginx — настройка страницы 404
-
06-07-2019 - |
Вопрос
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. Р>
Параметр 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;
...
}