Re: Обработка 502 ошибки в именованном локейшене

Maxim Dounin mdounin at mdounin.ru
Thu Apr 18 13:50:01 UTC 2013


Hello!

On Thu, Apr 18, 2013 at 02:31:04PM +0400, Alex Belyansky wrote:

> Добрый день!
> 
> Своими силами проблему никак решить не могу. В дополнение
> прикладываю часть debug.log из которого видно, что идет внутренний
> редирект к странице 500.html,
> когда имеет место 404-ая ошибка и апстрим на нее не ответил.
> А вот в случае 403-ей ошибки, когда апстрим не отвечает, то такого
> редиректа для отдачи 500.html не срабатывает и Nginx отдает свою
> собственную 502-ую.

[...]

> On 17.04.2013 16:14, Alex Belyansky wrote:
> >Добрый день!
> >
> >Имею вот такое в конфигурации:
> >
> >error_page 500 501 502 503 504 /500.html;
> >
> >
> >location / {
> >            try_files   $uri    $uri/   @upstream;
> >            error_page  404 = @upstream;
> >            error_page  403 = @upstream;

Надо сделать так:

               recursive_error_pages on;

> >}
> >
> >location @upstream {
> >    proxy_pass  http://backend;
> >}
> >
> >
> >Когда нет связи с бекендом и при этом запрашивается несуществующая
> >страница (404), то nginx нормально отображает мою 500.html
> >А вот когда запрашивается страница с ошибкой по правам доступа
> >(403), то nginx отображает свою дефолтовую страницу, вместо моей
> >500.html
> >
> >Что делаю не так? Где что прописать, чтобы нормально отображалась
> >моя 500.html для ситуации с 403-ей ?

На самом деле 404-х ошибок у вас просто не бывает - 
перенаправление в @upstream для несуществующих файлов делается 
директивой try_files.

Для того, чтобы можно было делать более одного перенаправления с 
помощью директивы error_page - нужно включить 
recursive_error_pages, см. тут:

http://nginx.org/r/recursive_error_pages

-- 
Maxim Dounin
http://nginx.org/en/donation.html



Подробная информация о списке рассылки nginx-ru