Nginx实现乱序匹配路径中的多个query参数

10 篇文章 0 订阅

最近项目想实现在反向代理层判断query参数,比如强制要求必须存在foo和bar参数,如果不满足条件就404
最开始想通过正则来进行多字符串乱序匹配
在网上搜了好久,唯一一个几乎能够满足要求的,发现在Nginx中无法使用。
最终还是需要使用if进行条件判断
https://stackoverflow.com/a/11310817/7151777
但是Nginx语法竟然不支持if条件的逻辑与或非,而且没有else
例如如下写法就会报错

server {
    ...
    
    location ~ /xxx {
        if ( $arg_foo != '' && $arg_bar != '' ) {
            return 200;
        }
    }
}
>>> nginx -t
nginx: [emerg] invalid condition "$arg_foo" in /etc/nginx/sites-enabled/default:4
nginx: configuration file /etc/nginx/nginx.conf test failed

所以就只能通过标记变量来实现
如下所示,在条件都满足后,变量a会变为11,最后返回200

server {
    ...
    
    location ~ /xxx {
        set $a 0;
        if ( $arg_foo != '') {
            set $a 1;
        }
        if ( $arg_bar != '') {
            set $a 1$a;
        }
        if ( $a = 11 ) {
            return 200 $a;
        }
    }
}

参考:
https://blog.csdn.net/abc86319253/article/details/49763267
https://ofstack.com/Nginx/14906/examples-of-if–and–or-statement-usage-in-nginx.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值