nginx サーバーを次のように構成する必要があります: ユーザーが特定の Cookie を持っている場合はサーバーがファイルを送信し、そうでない場合はサーバーが別のファイルを送信する必要があります。関連記事をたくさん読みましたが、何も役に立ちませんでした。また、try_files
meets に問題があることはわかっています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/depth/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;
}