nginx -> verschiedene Dateien mit try_files basierend auf Cookies bereitstellen (Bedingungen, wenn, dann, sonst)

nginx -> verschiedene Dateien mit try_files basierend auf Cookies bereitstellen (Bedingungen, wenn, dann, sonst)

Ich muss einen Nginx-Server so konfigurieren, dass: Wenn der Benutzer ein bestimmtes Cookie hat, muss der Server eine Datei senden, andernfalls muss der Server eine andere senden. Ich habe viele verwandte Artikel gelesen, aber nichts hat geholfen. Außerdem weiß ich, dass es bei try_filesMeetings einige Probleme gibt location if, aber wie kann ich diese lösen ...

Ich habe ein Beispiel, das funktionieren sollte, es aber nicht funktioniert:

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

}

Antwort1

Versuchen Sie etwas wie Folgendes:

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

Denken Sie daran, dass „if“ laut der Nginx-Dokumentation böse ist. Seien Sie also vorsichtig.

Mehr Info:

Tschüss!

Antwort2

Ich habe es so gemacht. Ich bin nicht sicher, ob das die beste Lösung ist, aber es funktioniert.

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

verwandte Informationen