nginx: configuração diferente baseada em cookie

1

Estamos trabalhando em um grande refatorador do nosso site. Para o lançamento, gostaríamos de começar a enviar um pequeno subconjunto de nossos usuários para a nova versão. Não queremos que eles continuem alternando entre o antigo e o novo, por isso, estamos planejando definir um cookie na primeira visita deles e usá-lo para decidir o que fazer.

Sabemos como fazer todo esse trabalho, exceto para alterar a configuração do nginx com base no cookie. As configurações são praticamente as mesmas, exceto que precisamos usar uma raiz diferente e try_files é diferente entre os dois, já que a versão antiga é estruturada como page_name / index.php e a nova versão roteia tudo através de um arquivo index.php.

Para alterar a raiz com base em um cookie, tenho que trabalhar usando um mapa, mas não tenho certeza do que fazer com a parte try_files. Eu estou tentando evitar usar se baseado em if-is-evil. A versão antiga não usa try_files, e a nova versão usa try_files $uri $uri/ /index.php?$args;

Qual é a melhor maneira de prosseguir sem usar se, ou deveríamos estar seguros para usar, se neste caso?

    
por Jay Paroline 07.09.2016 / 22:11

2 respostas

1

Acho que podemos processar isso com openresty

aqui é exemplo

arquivo conf nginx
server {
    listen 8081;
    server_name localhost;
    location / {
        content_by_lua_block {
            ngx.say('8081 version')
        }
    }
}
server {
    listen 8082;
    server_name localhost;
    location / {
        content_by_lua_block {
            ngx.say('8082 version')
        }
    }
}
server {
    listen 80;
    server_name localhost;

    location / {
        set $versionupstream  "";
        rewrite_by_lua_block {
            local newcookie = ngx.var.cookie_Foo

            if newcookie == "bar" then
                ngx.var.versionupstream = "127.0.0.1:8081"
            else
                ngx.var.versionupstream = "127.0.0.1:8082"
            end
        }

        proxy_pass http://$versionupstream;
    }
}
teste-o

    
por 08.09.2016 / 02:12
0

Acredito que isso só é possível com o NGINX Plus usando sticky route .

Dê uma olhada no link

    
por 07.09.2016 / 22:46

Tags