Re: Проксирование Cookie как в Apache ProxyPassReverseCookie

Maxim Dounin mdounin на mdounin.ru
Вс Апр 17 22:33:10 MSD 2011


Hello!

On Sun, Apr 17, 2011 at 12:32:21PM -0400, Begetan wrote:

> Уважаемые, хочу понять может ли Nginx
> выполнять проксирование Cookie наподобие
> директив Apache 
> ProxyPassReverseCookieDomain или ProxyPassReverseCookiePath
> 
> 
> Подобная задача возникает при работе с
> сессиям, например от backend.org приходит
> ответ
> Set-Cookie	JSESSIONID=xxx; domain=.backend.com; path=/
> 
> А нужно сделать чтобы было так:
> Set-Cookie	JSESSIONID=xxx; domain=.frontend.com; path=/
> 
> В запросе соответственно выполняется
> обратная замена

В запросе ничего заменять не надо - там ни пути, ни домена не 
присутствует.

> С заголовками запроса все просто, есть
> $cookie_, есть $http_cookie
> 
> if ($http_cookie ~* "JSESSIONID=(.*)(domain=.frontend.com;)(.*)") {
>             set $mycookie "JSESSIONID=$1 domain=.backend.com; $3";
>         } 
> Затем  proxy_set_header      Cookie          $mycookie;
> 
> Конфигурацию не проверял, но
> принципиально должно работать.
> 
> А вот с заголовками ответа - непонятно.
> Есть директива
>  add_header     Set-Cookie $bla;
> 
> Она работает. Проблема в том как
> извлечь исходную куку из заголовков
> ответа. Читал описание встроенных
> переменных и нужной не нашел.
> 
> Вопрос 1. Доступны  ли переменные с
> заголовками ответов, а именно Set-Cookie? 

Заголовок ответа бекенда можно достать через переменную 
$upstream_http_<header>, в данном случае - 
$upstream_http_set_cookie.

Нюанс 1: сделать с ним можно что-то разве что через встроенный 
перл (perl_set), ибо все if'и уже давно отработали.

Нюанс 2: если заголовков много - будет доступен только первый из 
них.

> Вопрос 2. Можно ли каким то то способом
> реализовать проксирование Cookie в nginx?
> Вопрос 3. Не планируется ли аналог 
> директив Apache  ProxyPassReverseCookie?
> 
> Я видел, что большинство вопрошающих в
> рассылку либо не могли сформулировать
> понятно вопрос, либо решили проблему с
> установкой нужной Cookie на стороне backend. 
> Тем не менее, иногда существует
> необходимость сделать замену на frontend.
> Хочется услышать мнение разработчиков.
> Заранее благодарю!

IMHO - надо бы сделать.  Но пока не до того.

Maxim Dounin



Подробная информация о списке рассылки nginx-ru