proxy if cookie + map

Валентин Бартенев vbart at nginx.com
Thu Aug 28 12:41:20 UTC 2014


On Thursday 28 August 2014 15:41:58 Синицкий Павел Евгеньевич wrote:
> Добрый день,
> 
> Ситуация следующая: имеется боевой сервер в связке nginx + php-fpm + новая
> версия сайта на соседнем сервере, на котором тоже крутится nginx и php-fpm.
> Задача такова: на боевом сервере настроить проксирование на новую версию
> сайта в зависимости от установленной у посетителя куки.
> 
> Сложность в том, что в блок if нельзя завернуть proxy_set_header - на
> форумах советуют для этих целей использовать map с сопутствующей ссылкой на
> http://nginx.org/ru/docs/http/ngx_http_map_module.html. Никак не могу
> понять, как обойтись без if, а только map в моем случае?
> 
> Другими словами, конструкция ниже работает только для внутренней сети (в
> логах браузера идет подгрузка с ip 192.168.2.146).
> 
> server {
> ...
>        if ($http_cookie ~ 'newsitetest') {
>                 set $newsite 1;
>        }
> ...
>         location ~* ^/(.+)$ {
> 
>                         if ($newsite = 1) {
>                                        proxy_pass http://192.168.2.146;
>                                        break;
>                         }
>                 try_files $uri $uri/ /not_found.php?query_uri=/$1&$args;
>                 fastcgi_pass   127.0.0.1:9000;
>                 fastcgi_index  index.html;
>                 include        fastcgi_params;
>                 fastcgi_param  SCRIPT_FILENAME
> $document_root$fastcgi_script_name;
> }
> }
> 


  location / {

      if ($http_cookie_newsitetest) {
          rewrite ^ /newsite/$uri last;
      }

      fastcgi_pass 127.0.0.1:9000;
  }

  location /newsite/ {
      proxy_pass http://192.168.2.146/;
  }

--
Валентин Бартенев


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