首页 > 系统相关 >【nginx】Nginx if语法不支持if条件的逻辑与&&逻辑或|| 运算 ,而且不支持if的嵌套语法。需要借助变量来实现嵌套语法或多条件判断

【nginx】Nginx if语法不支持if条件的逻辑与&&逻辑或|| 运算 ,而且不支持if的嵌套语法。需要借助变量来实现嵌套语法或多条件判断

时间:2023-02-14 11:36:17浏览次数:50  
标签:origin 逻辑 set 语法 嵌套 flag 条件

条件判断
Nginx语法不支持if条件的逻辑与&&逻辑或|| 运算 ,而且不支持if的嵌套语法。需要借助变量来实现嵌套语法或多条件判断

location / {
    set $flag 0;
    if ($host = www.example.org) {
        proxy_pass https://www.example.org;
        set $flag 1;
    }
    
    # 没有匹配到,跳转到默认页面
    if ($flag = 0) {
        proxy_pass https://www.example.cn;
    }
}

多条件判断

location / {
    set $flag 0;
    if ($uri ~ ^/static/$){
         set $flag "${flag}1";
    }
    if ($scheme= http){
         set $flag "${flag}1";
    }
    if ($flag = "011"){
         echo "https://www.example.cn";
    }
}
一、Nginx OR 多条件写法
新建一个条件变量 flag,只要 flag 是 1 就说明起码有一个条件成立:
set $flag 0;
if () {
    set $flag 1;
}
if () {
    set $flag 1;
}
if ($flag = 1) {
    your code;
}

 

二、Nginx AND 多条件写法
新建一个条件变量 flag,全都都是 1 则表示所有条件都成立:
set $flag "";
if () {
    set "${flag}1";
}
if () {
    set "${flag}1";
}
if ($flag ~* "11") {
    your code;
}

具体案例

跨域请求中配置不同的域名

  # 声明一个控制变量,做到类似else效果
  set $switchVarible 0;

  if ($http_origin ~* "^https://www.aliwork.com$") {
      set $cors_origin $http_origin;
      set $switchVarible 1;
  }
  if ($http_origin ~* "^https://localohost:8000$") {
      set $cors_origin $http_origin;
      set $switchVarible 1;
  }
  if ($switchVarible != 1) {
      set $cors_origin '*';
  }
  
  add_header Access-Control-Allow-Origin $cors_origin;
  add_header Access-Control-Allow-Credentials true;

 

标签:origin,逻辑,set,语法,嵌套,flag,条件
From: https://www.cnblogs.com/opensmarty/p/17119003.html

相关文章