nginx中的break与last指令区别

简介: 很多人资料说,last与break的区别在于,last并不会停止对下面location的匹配。我理解上模模糊糊。今天自己来测验了一下。rewrite 指令末尾的break应该与单独写break作用是不同的,比如:if ($slow) {  limit_rate  10k;  break;}nginx对待rewrite中的break使用了单独的代码处理去此命令。



很多人资料说,last与break的区别在于,last并不会停止对下面location的匹配。我理解上模模糊糊。今天自己来测验了一下。




rewrite 指令末尾的break应该与单独写break作用是不同的,比如:


if ($slow) {
  limit_rate  10k;
  break;
}



nginx对待rewrite中的break使用了单独的代码处理去此命令。




测验一下break与last的区别




location /test1.txt/ {

rewrite /test1.txt/  /test2.txt break;

}

location ~ test2.txt {
return 508;
}


使用break会停止匹配下面的location,直接发起请求www.xxx.com/test2.txt,由于不存在文件test2.txt,则会直接显示404。
使用last的话,会继续搜索下面是否有符合条件(符合重写后的/test2.txt请求)的location。此时,/test2.txt刚好与面location的条件对应上了,进入花括号{}里面的代码执行,这里会返回508。

 

 

 

508是我随便设置的一个数字,反正只是测验而已。直接在屏幕上是看不到显示的。在火狐的firebug中能够看到信息




在nginx的源码中处理break与last完全分成了不同的代码块来处理:

if (ngx_strcmp(value[3].data, "last") == 0) {‘
last = 1;

....................


} else if (ngx_strcmp(value[3].data, "break") == 0) {
regex->break_cycle = 1;
last = 1;
....................
}



从上面看到是对数组的第三个元素专门进行处理。
重写代码"rewrite /2a.txt/ /2b.txt break;"中的break指令刚好是在第四(0开始数刚好是用3访问)个位置处。



理解不准之处。欢迎指正。nginx是用c语言编写的。熟悉c语言就容易看懂源码。我使用c语言少。以后要去补习一下。

目录
相关文章
|
8月前
|
应用服务中间件 Linux nginx
直接部署nginx和在docker里面部署nginx性能上有区别吗
直接部署nginx和在docker里面部署nginx性能上有区别吗
271 0
|
13天前
|
前端开发 应用服务中间件 网络安全
nginx和apache的区别
Nginx是轻量级、抗并发的服务器,擅长静态文件处理和反向代理,配置简洁,适合高流量场景。 Apache采用同步多进程模型,功能丰富,对动态请求处理强,SSL支持好,适合复杂的企业级应用。 根据需求,高并发选Nginx,丰富功能和稳定性考虑Apache。两者也可结合使用,Nginx作为前端代理,Apache处理后端请求。
|
15天前
|
网络协议 应用服务中间件 nginx
Nginx的http块sendfile,keepalive_timeout的配置指令说明
Nginx的http块sendfile,keepalive_timeout的配置指令说明
|
2月前
|
负载均衡 应用服务中间件 网络安全
深入理解Nginx与Ribbon的区别
深入理解Nginx与Ribbon的区别
108 0
|
2月前
|
JSON JavaScript 前端开发
vue2_vite.config.js的proxy跨域配置和nginx配置代理有啥区别?
vue2_vite.config.js的proxy跨域配置和nginx配置代理有啥区别?
69 1
|
2月前
|
缓存 负载均衡 网络协议
代理服务器之squid、lvs、nginx、haproxy之间的区别
根据不同的需求和场景,选择适合的代理服务器可以提升应用性能和可用性。
208 4
|
10月前
|
Java 应用服务中间件 nginx
SpringClould-Gateway和nginx网关的区别
SpringClould-Gateway和nginx网关的区别
220 0
|
2月前
|
前端开发 应用服务中间件 nginx
Nginx中root与alias区别
Nginx中root与alias区别
49 0
|
2月前
|
应用服务中间件 nginx
百度搜索:蓝易云【Nginx【Nginx核心指令(rewrite指令、实战rewrite 、if指令、set和break指令】】
这些核心指令在Nginx的配置文件中发挥重要作用。使用rewrite指令可以实现URL的重写和重定向,if指令可以根据条件执行不同的操作,set指令可以创建自定义变量并设置其值,而break指令可以中断请求处理流程。理解和灵活运用这些指令,可以帮助我们更好地配置和管理Nginx服务器。
77 1
|
2月前
|
应用服务中间件 nginx
Nginx 配置中root和alias的区别分析
Nginx 配置中root和alias的区别分析
132 0