Nginx - настройка 404 страницы
Nginx + PHP (на fastCGI) отлично работает для меня. Когда я ввожу путь к файлу PHP, который не существует, вместо получения страницы ошибки 404 по умолчанию (которая появляется для любого недопустимого .html файла), я просто получаю "No input file указанный.".
Как настроить эту страницу ошибок 404?
Ответы
Ответ 1
Вы используете свойство error_page в конфигурации nginx.
Например, если вы намереваетесь установить для страницы ошибки 404 значение /404.html
, используйте
error_page 404 /404.html;
Установить страницу ошибки 500 в /500.html
так же просто, как:
error_page 500 /500.html;
Ответ 2
Вы можете настроить пользовательскую страницу ошибок для каждого блока местоположения в вашем 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 для реальных примеров в Интернете.
Ответ 3
Будьте осторожны с синтаксисом! Великая Черепаха использовала их взаимозаменяемо, но:
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
Ответ 4
Параметр "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;
}
Ответ 5
Эти ответы больше не рекомендуются, поскольку try_files
работает быстрее, чем if
в этом контексте. Просто добавьте try_files
в свой блок местоположения php, чтобы проверить, существует ли файл, в противном случае возвращает 404.
location ~ \.php {
try_files $uri =404;
...
}