Nginx
nginx -> 使用基於 cookie 的 try_files 提供不同的文件(條件,如果,那麼,否則)
我需要配置一個 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 的文件,如果是邪惡的,所以要小心。
更多資訊:
- http://nginx.org/en/docs/http/ngx_http_rewrite_module.html
- https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/
啊!