ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Обработать http ст атус с backend'а



On Wed, Jun 17, 2009 at 09:36:58PM +0400, Олег Петрачёв wrote:

> День добрый,
> 
> >> статусах. Например, при 503 показать специальную страничку nginx'ом, а
> >> при всех остальных спроксировать, что отдал backend.
> > Как раз proxy_intercept_errors и нужно.
> перенаправлять их на обработку nginx'у с помощью директивы error_page.
> 
> Ага, спасибо, осознал. Но теперь хочется странного: чтобы эти страницы
> ошибок были видны только при внутренних редиректах. Знаю, что есть
> internal, но он при попытке обратиться к location отдаёт 404. А нужно
> другое: если запрос к странице ошибок вызван внутренним редиректом
> (например, через error_page), то отдавать её, а если не внутренним, то
> проксировать к backend'у.
> 
> Если сделать
> 
> location / {
>  proxy_intercept_errors on;
>  error_page 503 /503.html;
>  proxy_pass http://127.0.0.1;
> }
> 
> location /503.html {
>  root /var/www/errors;
> }
> 
> то при обращении снаружи к /503.html увидим нашу страницу ошибок, а
> запрос к бэкэнду спроксирован не будет.
> 
> Хотелось бы как-нибудь так:
> 
> location /503.html {
>  if (!$internal) {
>   proxy_pass http://127.0.0.1;
>  }
> }
> 
> Это как-нибудь возможно реализовать? В переменных в документации не
> вижу, за что там можно было бы зацепиться...

   location / {
      proxy_pass http://127.0.0.1;
      proxy_intercept_errors on;
      error_page 503 /503.html;
   }

   location = /503.html {
       internal;
       error_page 404 = @backend;
   }

   location @backend {
       proxy_pass http://127.0.0.1;
   }


-- 
Игорь Сысоев
http://sysoev.ru



 




Copyright © Lexa Software, 1996-2009.