我需要配置一台 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;
}
}
答案1
試試這樣的事情:
if ($cookie_myCookieNameIsBlaBlaBla ~* "cookieValueThatIWannaMatch") {
# my logic in here
}
請記住,根據 nginx 的文檔,if 是邪惡的,所以要小心。
更多資訊:
- http://nginx.org/en/docs/http/ngx_http_rewrite_module.html
- https://www.nginx.com/resources/wiki/start/topics/深度/ifisevil/
呀!
答案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;
}