在 nginx 中有没有更优雅的方式来应用条件?

在 nginx 中有没有更优雅的方式来应用条件?

有没有更好的方法?我找不到在 nginx 中嵌套或将布尔运算符应用于条件的方法。

基本上,如果设置了 cookie(非匿名用户),我们就会访问服务器。如果未设置 cookie 且文件存在,我们就会为文件提供服务,否则就访问服务器。

        set $test "D";
        if ($http_cookie ~* "session" ) {
            set $test  "${test}C";
        }
        if (-f $request_filename/index.html$is_args$args) {
            set $test  "${test}F";
        }
        if ($test = DF){
            rewrite (.*)/ $1/index.html$is_args$args?
            break;
        }
        if ($test = DCF){
            proxy_pass http://django;
            break;
        }
        if ($test = DC){
            proxy_pass http://django;
            break;
        }
        if ($test = D){
            proxy_pass http://django;
            break;
        }

答案1

location / {
    if ($cookie_session) {
        proxy_pass http://django;
    }
    try_files $uri/index.html$is_args$args @django;
}

location @django {
    proxy_pass http://django;
}

答案2

location / { 
    if ($cookie_session) {
        rewrite ^ /django/;
    }
    if (-f $request_filename/index.html$is_args$args) {
        rewrite (.*)/ $1/index.html$is_args$args; #did you mean ; instead of ?
    }
    proxy_pass http://django;
}
location /django/ {
    proxy_pass http://django;
}

不确定是否更好,但避免在 if 语句中使用被认为不安全的东西。

相关内容