On Friday 01 November 2013 17:50:51 Sergey Kobzar wrote: > On 11/01/13 15:09, Валентин Бартенев wrote: > > On Friday 01 November 2013 17:02:43 Валентин Бартенев wrote: > >> On Friday 01 November 2013 16:54:43 Sergey Kobzar wrote: > >> [..] > >> > >>>> Далее у вас есть internal location, в котором тот же > >>>> proxy_pass/fastcgi_pass с переменной и запрос отправляется на нужный > >>>> сервер. > >>> > >>> А переменную как выковырять из ответа? > >> > >> Например так: возвращаете "X-Accel-Redirect: /redirect_to/198.51.100.1" > >> > >> и он попадает в такой location: > >> location ~ ^/redirect_to/(?<backend>.+)$ { > >> > >> internal; > >> proxy_pass http://$backend; > >> > >> } > >> > >> Если нужно сохранить оригинальный URI запроса, то это делается с помощью > >> > >> set: > >> set $original_uri $request_uri; > >> > >> и proxy_pass в этом случает будет выглядеть так: > >> proxy_pass http://$backend$original_uri; > > > > Альтернативный, и даже наверное лучший и более простой вариант всего > > этого: использовать аналогичным образом модуль ngx_http_auth_request. > > > > http://nginx.org/ru/docs/http/ngx_http_auth_request_module.html > > Хм. А этот модуль при чем? Мне не нужно авторизовывать пользователей. >
Авторизация - лишь одно из применений. В каком-то смысле ваша задача тоже авторизация, вы авторизуете пользовательский запрос быть переданным на определенный бэкенд. Для вас важно, что модуль отправляет запрос на access-фазе на указанный сервер и позволяет из его ответа извлечь адрес бэкенда, на который потом запрос будет передан. Основной плюс тут в том, что на конечный бэкенд будет уходить оригинальный запрос, а не перенаправленный, как в предложенном мной ранее решении с X-Accel-Redirect. Не потребуется хака с сохранением $request_uri. -- Валентин Бартенев _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru