nginx下或(or)和与(and)运算,案例解析




概述: 使用过nginx的伙伴应该都知道,nginx本身默认是不支持或(or)和与(and)运算的,也就是&& 或者 | 等这样的方式都不能直接使用, 但不支持并不代表不能实现,本文中就来介绍在nginx下如何实现或运算和与运算。


案例1 、【与运算】,有些时候,我们项目中突然更换了域名,但老域名还是需要能提供访问,或者一个项目需要有多个域名可以访问,但最终效果我们都希望是跳转到一个域名在访问,因为会涉及ssl证书的问题,那么这个时候我们就需要针对域名做判断,这其中还会涉及到http与https的问题,我们需要做【与运算】。


set $req a;


if ( $host !~ "www.test.cn" ) {


set $req "${req}b";


}


if ( $scheme ~ https ) {


set $req "${req}c";


}


if ( $req = abc ) {


rewrite ^/(.*) https://www.test1.cn/$1 permanent;


}

#以下这条规则实现非指定域名统一跳转 if ( $host !~ "www.test.cn" ) { rewrite ^/(.*) https://www.test1.cn/$1 permanent; }

案例2、 【或运算】 , 这是在gitlab下http访问方式的一个限制测试,充分利用gitlab的http验证方式,限制gitlab的资源权限管理,下面来看看与运算的实现。

#定义访问用户

set $i a;

if ( $remote_user ~* "user01" ) {

set $i "${i}b";

set $i "${i}b2";

}

if ( $remote_user ~* "user02" ) {

set $i "${i}b3";

}

if ( $remote_user ~* "user03" ) {

set $i "${i}b4";

} }



#定义访问的项目


if ( $filtered_request_uri ~* "prd01" ) {

set $i "${i}c";

}

if ( $filtered_request_uri ~* "prd02" ) {

set $i "${i}d";

}

if ( $filtered_request_uri ~* "prd03" ) {

set $i "${i}e";

}

if ( $filtered_request_uri ~* "prd04" ) {

set $i "${i}f";

}



#最终的执行动作


if ( $i ~* "ab(c|d|e|f)" ) {

return 503;

}

if ( $i ~* "ab2(d|e|f)" ) {

return 403;

}

if ( $i ~* "ab3(c|d|e|f)" ) {

return 503;

}

if ( $i ~* "ab4(c|d|e|f)" ) {

return 403;

}


总结: 通过上面的案例我们可以发现,其实在nginx上实现或和与运算并不复杂,以上或(or)和与(and)运算在nginx的实现仅提供参考和思路,具体环境中,可以进行变化,欢迎留言。

案例   nginx   or
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章