当前位置: > Linux服务器 > nginx >

nginx配置文件的rewrite中break和last的区别

时间:2014-12-10 18:50来源:linux.it.net.cn 作者:IT

Nginx配置文件的rewrite中break和last的区别,有需要的朋友不妨参考下。

来看一个这样的server配置:
 

 
server {  
listen       80;  
server_name  www.it.net.cn;
root         /var/www/itnetcn;  
index        index.php index.html index.htm;  
location [loc-1] {  
/**此处略去1000字**/  
}  
location [loc-2] {  
/**此处略去1000字**/  
}  
rewrite [match-1] [replace-1] break;  
rewrite [match-2] [replace-2] last;  
rewrite [match-3] [replace-3] last;  
rewrite [match-4] [replace-4] break;   
}

 

面对一个飞来的URI请求,Nginx的是这样来理解的:
 

复制代码代码如下:

/---------------------------下边是算法---------------------------/
amt = int[4]
for(i=1 to 4){
if(match[i].tag=='break')amt[i]=10;
else amt[i]=1;
}

while(还没有匹配过 OR 上一轮有匹配成功){
for i=1 to 4{
if(amt[i]==-1)continue;
if(url 匹配 match[i]){
url = do_replace(replace[i]);
amt[i]--;
} else {
amt[i]==-1
}

if(url 匹配 Loc[i]) 完成
}
}

if(url 在硬盘物理存在) 完成
else echo 错误404
/---------------------------上边是算法---------------------------/

大概95%的人没有看明白这个算法,好吧,用文字表达一下要点:

1、Nginx对rewrite的执行是按照先后顺序循环执行,一轮一轮的匹配替换URL,直到找到匹配的LOCATION或者存在这个URL对应的文件。

2、一个rewite匹配规则一旦没有被匹配上,则会被踢出循环队列,永远不再匹配,不论是last还是break

3、对于last的规则,如果每次都被匹配,则会一直执行下去,直到满10次,例如 rewrite ^/(.*) /1234.html last 这种必然会被执行的规则

4、对于break规则,最多匹配两次,两次之后,被踢出队列。

总结下,LAST和BREAK的区别就是,LAST是10,BREAK是2
在具体使用上,有一条原则:除非你非常清楚LAST和BREAK的原理,一律都用BREAK吧。

(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容