Nginx – настройка 404 страницы

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 } 

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

 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-correct-headers-with-custom-error-documents

Параметр «error_page» недостаточно.

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

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

Например

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

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

 location ~ \.php { try_files $uri =404; ... }