ПРОЕКТЫ 


  АРХИВ 


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: ошибка в обработке



Hello!

On Wed, Aug 05, 2009 at 02:25:19PM -0700, Konstantin Svist wrote:

> Konstantin Svist wrote:
> > Igor Sysoev wrote:
> >   
> >> On Fri, May 01, 2009 at 12:23:40PM -0700, Konstantin Svist wrote:
> >>
> >>   
> >>     
> >>>     server {
> >>>         location /foo/bar {
> >>>             proxy_pass http://backend-cluster;
> >>>         }
> >>>         location / {
> >>>             proxy_pass http://somehost;
> >>>         }
> >>>     }
> >>>
> >>> Если запрос приходит на /foo/bar но backend-cluster не отвечает, то
> >>> запрос перекидывается на somehost - который не знает как обработать
> >>> запрос типа /foo/bar.
> >>> **proxy_next_upstream ничего не меняет.
> >>>
> >>> Также без успеха пробовал добавить
> >>>         location /foo {
> >>>             return 403;
> >>>         }
> >>>     
> >>>       
> >> Скорее всего, используется что-то типа
> >>
> >>      error_page  502 504  /50x.html;
> >>
> >> А самого "location = /50x.html" нет, вот оно и уходит на "location /".
> >>
> >>   
> >>     
> >
> > Что-то я не могу понять как правильно сделать следующее:
> > * если бэкенд возвращает ошибку, использовать только nginx встроенную
> > страницу
> > * избежать вышеупомянутую проблему
> > * на многих server-ах
> >   
> 
> 
> Не ошибка ли это nginx-а?
> 
>     # only show nginx internal pages to the user
>     proxy_intercept_errors on;
>     error_page 401 404 500 501 502 503 504 505 /50x.html;

Комментарий очевидно misleading.  Использовать встроенные в nginx 
страницы ошибок при перехвате ошибок от бекенда - вообще нельзя, 
никак.  Встроенные страницы используются только для ошибок 
генерируемых непосредственно nginx'ом, и только если для них не 
определена error_page.

> 
>     server {
>         listen 80;
>         location /foo/ {
>             proxy_pass http://mybackend:8080;  # basic auth, returns 401
> if skipped
>         }
>         location / {
>             proxy_pass http://mybackend:8000;  # port not open
>         }
>     }
> 
> Если делаю запрос на /foo/, получаю 502 Bad Gateway.
> Т.е. идёт запрос без пароля, 8080 отвечает 401, nginx идёт на /50x.html
> но там получает 502 т.к. порт закрыт.
> Почему proxy_intercept_errors не обрабатывает этот 401?

Что значит не обрабатывает?  Ещё как обрабатывает - честно 
отправляет запрос на /50x.html.  А дальше уж куда конфиги привели 
- туда и дойдёт.

Maxim Dounin



 




Copyright © Lexa Software, 1996-2009.