当前位置: 首页 > news >正文

Nginx rewrite 执行顺序(草稿,下次继续编辑)

个人结论:

        1.server层ngx_http_rewrite_module模块相关指令按照配置顺序依次执行;

        2.server层执行完break指令后,该层级所有跟ngx_http_rewrite_module模块相关的指令都不再被执行,但是不影响其他模块(例如:https://zhuanlan.zhihu.com/p/357272929 的例子

 location = /testbreak {break;return 200 $request_uri;proxy_pass http://127.0.0.1:8080/other;}

,return也属于这块模块,但是之后跟上的proxy_pass 这并不属于这个模块,所以会生效,最终回到/other),但不影响location层ngx_http_rewrite_module模块相关指令的继续执行,所以请求处理过程会继续向下;

        3.location层执行完break指令后,当前server所有层级跟ngx_http_rewrite_module模块相关的指令都不再被执行(换言之就是,最终URI就这吧,别再找了),nginx根据最终请求路径将请求结果返回给客户端;

        4.无论在哪个层级执行完return指令后,请求处理过程都会立刻终止并将指定的code、重定向URL或响应正文文本返回给客户端。

        5.虽然Nginx在循环重写过程中最多是可以执行11次循环,但在第11次循环中执行rewrite后会抛500异常,所以严格意义上来说,正常情况下Nginx请求重写循环过程最多就是10次。强烈建议亲自做下测试10。

        6.rewrite regex /xxx break指令与单独break指令的中断效果一样,用IF语句满足匹配条件之后,执行rewrite regex /xxx,再执行break,估计效果相同。

        7.rewrite regex /xxx last指令是执行完重写后,立即开始(下一轮)匹配location,server层或当前location层其它指令不再执行。

例子暂时先这样:

     server {listen  80;server_name  www.cjlnginx.com;root  /tmp/cjl;index 1.txt;port_in_redirect off;location = /6.txt {rewrite ^  /7.txt;#因为7.txt没有匹配location了,接下来没>
有匹配rewrite了,所以虽然没有break但还是定格在7.txt}location = /3.txt {rewrite ^  /5.txt;rewrite ^  /6.txt last;#此处如果是break就显示6,last的话,
那么就会重新筛选从头代入location.也就是上面的7.txt.中断了下面的rewrite,如果
这条是最后一条的话(注释下面这条),即使不加last,也会新筛选从头代入location.所
以last的作用,感觉就是结束后续的rewrite模块.rewrite ^  /8.txt; #如果上面有标志,这个8.txt就不会执行,>
如果flag不填的话,则会顺序下来.}location = /2.txt {rewrite ^  /1.txt;#注意这里会继续到rewrite那了,如果break
直接就是1.txt}rewrite ^(/3.txt)$ /2.txt;#顺序执行下去3->2,2->5,5->2rewrite ^(/1.txt)$ /3.txt last;#break一样的效果,都会进入locat
ion,rewrite ^(/3.txt)$ /4.txt;rewrite ^(/2.txt)$ /5.txt;rewrite ^(/5.txt)$ /2.txt;#如果此处没有被,location = /2.txt捕
获或者在末尾加上break,就会死循环.rewrite ^(/6.txt)$ /9.txt  break;#rewrite ^(/7.txt)$ /4.txt;#如果打开这个和下面这条,你会发现又
回到rewrite了#rewrite ^(/4.txt)$ /9.txt  break;location ~ /6.txt { #这里不会进入,前面有= /6.txt 一直给拦截了
了,所以这里不会执行到rewrite ^  /8.txt;}}

请求http://www.cjlnginx.com/1.txt 和​​​​​​​http://www.cjlnginx.com/3.txt 看看结果.就能摸索出来.

http://www.lryc.cn/news/514997.html

相关文章:

  • 01.03周五F34-Day44打卡
  • 数字货币支付系统开发搭建:构建未来的区块链支付生态
  • NLP CH3复习
  • BurpSuite2024.11
  • 亚信安全2025年第1期《勒索家族和勒索事件监控报告》
  • 【工具进阶】使用 Nmap 进行有效的服务和漏洞扫描
  • 【工具推荐】XSS 扫描器-XSStrike
  • Spring Boot 各种事务操作实战(自动回滚、手动回滚、部分回滚)
  • Zabbix5.0版本(监控Nginx+PHP服务状态信息)
  • C# 设计模式概况
  • Nginx 配置 SSL(HTTPS)详解
  • 论文解读之Generative Dense Retrieval: Memory Can Be a Burden
  • RTC:实时时钟
  • mqtt python rtsp拉流图传测试
  • win32汇编环境,对话框程序中通过资源显示bmp图像
  • 《探索人工智能的多元学派:符号主义、连接主义与行为主义》
  • 2024年终总结及计划
  • 数据挖掘——关联规则挖掘
  • JVM实战—9.线上FGC的几种案例
  • STM32-BKP备份寄存器RTC实时时钟
  • HTML-文本标签
  • 香橙派5plus单独编译并安装linux内核无法启动的原因分析与解决记录
  • 嵌入式应用软件开发中C语言方向面试题
  • linux 系统配置ip
  • 低代码开发:开启企业数智化转型“快捷键”
  • Tailwind CSS 实战:性能优化最佳实践
  • [redux] useDispatch的两种用法
  • Postgresql 命令还原数据库
  • 电脑找不到mfc110.dll文件要如何解决?Windows缺失mfc110.dll文件快速解决方法
  • Elasticsearch与数据库数据一致性:最佳实践与解决方案