nginx -> 根据 cookies 使用 try_files 提供不同的文件(条件,if,then,else)

nginx -> 根据 cookies 使用 try_files 提供不同的文件(条件,if,then,else)

我需要配置一个 nginx 服务器,以便:如果用户有特定的 cookie,那么服务器必须发送一个文件,否则服务器必须发送另一个文件。我阅读了大量相关文章,但都无济于事,我也知道遇到一些问题,try_fileslocation 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;
}

相关内容