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

Igor Sysoev is at rambler-co.ru
Wed Jun 17 22:03:43 MSD 2009


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





More information about the nginx-ru mailing list