nginx不支持if的嵌套和if条件的逻辑运算
想实现如下的功能:
###if嵌套不支持
if($arg_xxxMode = TEXT) {
if($arg_Id = xxx) {
proxy_pass http://1.1.1.1:8080;
break;
}
proxy_pass http://upstream1;
break;
}
###if条件逻辑运算不支持
if($arg_xxxMode = TEXT && $arg_Id = xxx) {
proxy_pass http://1.1.1.1:8080;
}
所以换个思路,可以通过变量的方式来实现,如下:
location / {
set $flag 0;
if ($arg_xxxMode = TEXT) {
set $flag "${flag}1";
}
if ($arg_Id = xxx) {
set $flag "${flag}2";
}
if ($flag = "012") {
proxy_pass http://1.1.1.1:8080;
break;
}
if ($flag = "01") {
proxy_pass http://upstream1;
break;
}
if ($flag = "0") {
proxy_pass http://upstream2;
}
}