最近项目想实现在反向代理层判断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
|