nginx - serve arquivos diferentes usando try_files baseado em cookies (condições, se, então, mais)

1

Eu preciso configurar um servidor nginx para que: Se o usuário tiver um cookie específico, o servidor deverá enviar um arquivo, caso contrário, o servidor deverá enviar outro. Eu li muitos artigos relacionados, mas nada ajudou, também sei que há alguns problemas quando try_files atende location if mas como resolver isso ...

Eu tenho um exemplo, que deve estar funcionando, mas não de fato:

upstream site {
    server localhost:4321;
}

server {

    listen *:1234;
    server_name site.com;
    root /path/www/;

    ssl on;
    ssl_certificate /path/ssl.crt;
    ssl_certificate_key /path/ssl.key;

    location = / {

        set $variable /path/index.html;

        if ($http_cookie ~* "someCookie=someValue(?:;|$)") {
            set $index_file /path2/index.html;
        }

        rewrite .* $index_file break;

        try_files  $uri/index.html $uri.html $uri @site;
    }

}
    
por kashesandr 09.10.2015 / 10:22

2 respostas

0

Eu fiz dessa maneira, não tenho certeza da melhor solução, mas funciona.

location @rewrite {
    if ($http_cookie ~* "someCookie=someValue(?:;|$)") {
        rewrite .* /path1/file1.html last;
    }
    rewrite .* /path2/file2.html last;
}

location = / {
    try_files $uri/index.html $uri.html $uri @rewrite;
}
    
por 10.10.2015 / 13:48
0

Tente algo assim:

if ($cookie_myCookieNameIsBlaBlaBla ~* "cookieValueThatIWannaMatch") {
   # my logic in here
}

Lembre-se que, de acordo com a documentação do nginx, se é mal, tenha cuidado.

Mais informações:

Cya!

    
por 09.10.2015 / 16:58