Nginx

nginx -> 使用基於 cookie 的 try_files 提供不同的文件(條件,如果,那麼,否則)

  • October 10, 2015

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

}

我是這樣做的,不確定最好的解決方案,但它確實有效。

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

嘗試這樣的事情:

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

請記住,根據 nginx 的文件,如果是邪惡的,所以要小心。

更多資訊:

啊!

引用自:https://serverfault.com/questions/727809