Вот фрагмент моей конфигурации nginx:
server {
error_page 500 /errors/500.html;
}
Когда я вызываю 500 в своем приложении, Chrome просто показывает свою страницу 500 по умолчанию (Firefox и Safari показывают пустую страницу), а не мою пользовательскую страницу ошибки.
Я знаю, что файл существует, потому что могу посетить http://server/errors/500.html
и я вижу страницу. Я также могу переместить файл в корень документа и изменить конфигурацию на это:
server {
error_page 500 /500.html;
}
а nginx правильно обслуживает страницу, поэтому не похоже, что это что-то еще неправильно настроено на сервере.
Я также пробовал:
server {
error_page 500 $document_root/errors/500.html;
}
и:
server {
error_page 500 http://$http_host/errors/500.html;
}
и:
server {
error_page 500 /500.html;
location = /500.html {
root /path/to/errors/;
}
}
без везения.
Это ожидаемое поведение? Должны ли страницы с ошибками существовать в корне документа, или мне не хватает чего-то очевидного?
Обновление 1: Это также не удается:
server {
error_page 500 /foo.html;
}
когда foo.html
действительно существует в корне документа. Кажется, что что-то еще перезаписывает мою конфигурацию, но этот блок - единственное место в /etc/nginx/*
что ссылается на error_page
директива.
Есть ли другое место, где можно было бы установить конфигурацию nginx?
Попробуйте добавить
proxy_intercept_errors on;
или
fastcgi_intercept_errors on;
в серверном блоке в зависимости от вашей конфигурации.
Такая конфигурация работает нормально:
error_page 500 502 503 504 /500.html;
location = /500.html {
root /home/static/pages;
}
попробуй это:
сервер {error_page 500 = 200 /errors/500.html; }
это должно отправить http-статус 200, чтобы браузер отобразил вашу страницу. Со статусом по умолчанию (500) браузер, вероятно, показывает собственную страницу с ошибкой и игнорирует ваш контент, даже если он отправляется сервером.
С уважением, Адам