概述: 使用过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的实现仅提供参考和思路,具体环境中,可以进行变化,欢迎留言。
留言与评论(共有 0 条评论) “” |