β

nginx实现多重if判断

Rebill's Blog 186 阅读

nginx的配置中不支持if条件的逻辑与/逻辑或运算 ,并且不支持if的嵌套语法,我们可以用变量的方式来实现:
首先是伪代码(即不被nginx支持),写在这里只是为了方便理解:
if ($remote_addr ~ "^(12.34|56.78)" && $http_user_agent ~* "spider") {
    return 403;
}

这是等效的,并真实可用的配置

set $flag 0;
if ($remote_addr ~ "^(12.34|56.78)") {
    set $flag "${flag}1";
}
if ($http_user_agent ~* "spider") {
    set $flag "${flag}2";
}
if ($flag = "012") {
    return 403;
}
作者:Rebill's Blog
博采众长,精于一技。Live for love, work for dream.
原文地址:nginx实现多重if判断, 感谢原作者分享。

发表评论