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_files
Meetings 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:
- http://nginx.org/en/docs/http/ngx_http_rewrite_module.html
- https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/
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;
}