nginx -> обслуживает различные файлы с помощью try_files на основе cookie-файлов (условия, если, то, иначе)

nginx -> обслуживает различные файлы с помощью try_files на основе cookie-файлов (условия, если, то, иначе)

Мне нужно настроить сервер nginx так, чтобы: Если у пользователя есть определенный cookie, сервер должен отправить файл, в противном случае сервер должен отправить другой. Я прочитал много связанных статей, но ничего не помогло, также я знаю, что есть некоторые проблемы при try_filesвстречах location if, но как это решить...

У меня есть пример, который должен работать, но на самом деле это не так:

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;
    }

}

решение1

Попробуйте что-то вроде этого:

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

Просто помните, что согласно документации nginx, if — это зло, поэтому будьте осторожны.

Больше информации:

Ура!

решение2

Я сделал так. Не уверен, что это лучшее решение, но оно работает.

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;
}

Связанный контент