nginx не будет обслуживать error_page в подкаталоге корневого каталога документа

nginx не будет обслуживать error_page в подкаталоге корневого каталога документа

Вот фрагмент моей конфигурации 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?

решение1

Попробуйте добавить

proxy_intercept_errors on;

или

fastcgi_intercept_errors on;

в блоке сервера в зависимости от вашей конфигурации.

Такая конфигурация работает нормально:

  error_page   500 502 503 504  /500.html;
    location = /500.html {
        root   /home/static/pages;
    }

решение2

попробуй это:

сервер { error_page 500 =200 /errors/500.html; }

это должно отправить http-статус 200, чтобы браузер отобразил вашу страницу. Со статусом по умолчанию (который равен 500) браузер, вероятно, показывает свою собственную страницу с ошибкой и игнорирует ваш контент, даже если он отправлен сервером.

С уважением, Адам.

Связанный контент