NGINX:检查Cookies是否不';不存在

NGINX:检查Cookies是否不';不存在,nginx,Nginx,如果使用NGINX的用户发出的请求中没有authcookie,我会尝试将他们重定向到不同的虚拟主机。也就是说,当他们访问foo.com时,如果存在authcookie,那么他们应该看到foo.com;如果他们缺少authcookie,他们应该查看signup.foo.com 我已经通读了NGINX中的“If is Evil”,并且我能够成功地检查用户是否有cookie。我是这样做的: if ($cookie_auth) { redirect 301 https://signup.foo

如果使用NGINX的用户发出的请求中没有
auth
cookie,我会尝试将他们重定向到不同的虚拟主机。也就是说,当他们访问
foo.com
时,如果存在
auth
cookie,那么他们应该看到
foo.com
;如果他们缺少
auth
cookie,他们应该查看
signup.foo.com

我已经通读了NGINX中的“If is Evil”,并且我能够成功地检查用户是否有cookie。我是这样做的:

if ($cookie_auth) {
     redirect 301 https://signup.foo.com;
}
...
但是,当然,这与我想发生的恰恰相反。我还试着做了一张地图,如下所示:

map $cookie_auth $no_auth {
    default 0;
    '' 1;
}

server {
     ...
     if ($no_auth) { return 301 https://signup.foo.com; }
     ...
}

但这似乎将一切都重定向到了signup.foo.com。我问题的实质是如何在NGINX中使用
NOT
操作符。类似于
if(!$cookie\u auth)
,例如。

您可以测试空字符串:

server {
    server_name www.example.com;

    if ($cookie_auth = "") {
        return 200 "cookie_auth is not set
";
    }

    if ($cookie_auth) {
        return 200 "cookie_auth is set =>$cookie_auth<=
";
    }

    return 200 "no match
";
}
服务器{
服务器名称www.example.com;
如果($cookie_auth=”“){
return 200“cookie\u未设置身份验证
";
}
如果($cookie\u auth){
return 200“cookie\u auth设置=>$cookie\u auth
curl --cookie auth=123 www.example.com
cookie_auth is set =>123<=

curl --cookie auth= www.example.com
cookie_auth is not set

curl www.example.com
cookie_auth is not set