nginx的配置中不支持if条件的逻辑与&& 逻辑或|| 运算 ,而且不支持if的嵌套语法,否则会报下面的错误:nginx: [emerg] invalid condition。

if ($scheme != "https" && $uri !~* "manage") {
 return 404;
}

如果按照这样来配置,就会报nginx: [emerg] invalid condition错误。

解决:我们可以用变量的方式来间接实现。

  1. set $tag 0;
    if ($scheme != "https") {
      set $tag "${tag}1";
    }
    if ($uri !~* "manage") {
      set $tag "${tag}1";
    }
    if ($tag = "011"){
         return 301 https://$host$request_uri;
    }