咨询热线:4006-75-4006

售前:9:00-23:30    备案:9:00-18:00    技术:7*24h

Nginx实现if多重判断配置方法示例

2015-12-01 16:58:31 4799次
nginx的配置中不支持if条件的逻辑与/逻辑或运算 ,并且不支持if的嵌套语法,我们可以用变量的方式来实现:

首先是伪代码(即不被nginx支持),写在这里只是为了方便理解:

if ($remote_addr ~ "^(12.34|56.78)" && $http_user_agent ~* "spider") { 
   return 403; 
}

从这句话我们可以知道,如果满足条件一并同时也满足条件二,就返回一个值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; 
}

这里就相当于是定义一个值(值一),如果满足条件一这个值一就变成另一个值(值二),如果在满足条件二那么这个值二就变成另一个值(值三),最后如果值三等满足我们定义的一个值那么就返回我们的403.

这样就达到同样的效果了。

首页
最新活动
个人中心