nginx -> クッキーに基づいて try_files を使用して異なるファイルを提供する (条件、if、then、else)

nginx -> クッキーに基づいて try_files を使用して異なるファイルを提供する (条件、if、then、else)

nginx サーバーを次のように構成する必要があります: ユーザーが特定の Cookie を持っている場合はサーバーがファイルを送信し、そうでない場合はサーバーが別のファイルを送信する必要があります。関連記事をたくさん読みましたが、何も役に立ちませんでした。また、try_filesmeets に問題があることはわかっています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;
}

関連情報