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