nginx -> 基於 cookie 使用 try_files 提供不同的檔案(條件、if、then、else)

nginx -> 基於 cookie 使用 try_files 提供不同的檔案(條件、if、then、else)

我需要配置一台 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;
}

相關內容