帮助中心 >  技术知识库 >  网站相关 >  建站知识 >  Nginx实现if多重判断配置方法示例

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

2015-12-01 16:58:31 4748

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.

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

提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: