nginx中的break与last指令区别
很多人资料说,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。
last,重写后的规则,会继续用重写后的值去匹配下面的location。
break,重写后的规则,不会去匹配下面的location。使用新的规则,直接发起一次http请求了。
一个直接进行一次http请求,一个继续往下面匹配loction
在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语言少。以后要去补习一下。
nginx中的break与last指令区别的更多相关文章
- nginx中,$request_uri和$uri的区别
nginx中,$request_uri和$uri的区别 $request_uri This variable is equal to the *original* request URI as r ...
- nginx中root与alias关键字的区别
前言 近段时间秋招上岸了,于是每天疯狂补各种分布式基础,每天都在痛苦与快乐中度过. 在学习 nginx 的时候,遇到配置上的问题:root 与 alias 的区别,卡了大概三个小时,记录下来警醒自己不 ...
- Nginx中的break和last
rewrite中的break和last 两个指令用法相同,但含义不同,需要放到rewrite规则的末尾,用来控制重写后的链接是否继续被nginx配置执行(主要是rewrite.return指令). 示 ...
- 简述Python中的break和continue的区别
众所周知在Python中,break是结束整个循环体,而continue则是结束本次循环再继续循环. 但是作为一个新手的你,还是不明白它们的区别,这里用一个生动的例子说明它们的区别,如下: 1.con ...
- nginx url rewrite break和last的区别
break 将重写的URI作为一个新的URI,在本块中继续处理,将重写后 的地址在当前location块中处理,不会将新的URI转向到其他location块中 last,终止继续在本location块 ...
- for循环中的 break和continue的区别
break 语句用于跳出循环. for (i=0;i<10;i++) { if (i==3) { break; } x=x + "The number is " + i + ...
- php中 continue break exit return 的区别
php 中的循环有 for foreache while do{} whlie这几种. 1.continue continue是用来在循环结构中,控制程序放弃本次循环continue: 之后的语句,并 ...
- python中的break 和continue的区别
break语句可以在循环过程中直接退出循环,而continue语句可以提前结束本轮循环 break的例子如图,当遇到的n为偶数时,直接退出循环,所以打印的结果只有1. continue例子如下图,当遇 ...
- Nginx中的rewrite指令(break,last,redirect,permanent)
rewite 在server块下,会优先执行rewrite部分,然后才会去匹配location块 server中的rewrite break和last没什么区别,都会去匹配location,所以没必要 ...
随机推荐
- HTML <video> 标签
http://www.w3school.com.cn/tags/tag_video.asp <%@ Page Language="VB" AutoEventWireup=&q ...
- apache提示没有设置 max-age or expires解决办法
大家看到这个就应该知道只要设置 max-age or expires就行了.下面说的方法是在设置 apache下的方法: 产生要开启 代码如下 复制代码 LoadModule headers_modu ...
- apache Tomcat配置SSL(https)步骤
Tomcat配置https 1 生成Server端安全证书 要实现通信加密,首先要在本地准备一份符合X.509标准的Server端安全证书.如果有条件的话,可以向权威CA申请一份经过认证的安 ...
- Linux 定时任务【转载,整理】
目前,我已知的定时任务实现方法有两种:cron or systemd job,这里主要介绍cron的用法 一.crontab 简介 crontab命令的功能是在一定的时间间隔调度一些命令的执行.该命令 ...
- 【原创】纯干货,Spring-data-jpa详解,全方位介绍。(转)
本篇进行Spring-data-jpa的介绍,几乎涵盖该框架的所有方面,在日常的开发当中,基本上能满足所有需求.这里不讲解JPA和Spring-data-jpa单独使用,所有的内容都是在和Spring ...
- ROC 曲线简要解释
阳性 (P, positive)阴性 (N, Negative)真阳性 (TP, true positive):正确的肯定.又称:命中 (hit)真阴性 (TN, true negative):正确的 ...
- 使用 Swagger 文档化和定义 RESTful API
大部分 Web 应用程序都支持 RESTful API,但不同于 SOAP API——REST API 依赖于 HTTP 方法,缺少与 Web 服务描述语言(Web Services Descript ...
- Java:多线程,CyclicBarrier同步器
1. 背景 CyclicBarrier类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point).在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此 ...
- 使用组件构建Android应用程序
原文链接:http://android.eoe.cn/topic/android_sdk 应用程序组件 Android's application framework lets you create ...
- Android数据库高手秘籍(零)——前言
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/38083103 在我刚開始接触Android的时候甚至都不敢相信.Android系统 ...