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
|