![Nginx 重写 - 何时使用中断标志(模式目标中断)?](https://linux22.com/image/595499/Nginx%20%E9%87%8D%E5%86%99%20-%20%E4%BD%95%E6%97%B6%E4%BD%BF%E7%94%A8%E4%B8%AD%E6%96%AD%E6%A0%87%E5%BF%97%EF%BC%88%E6%A8%A1%E5%BC%8F%E7%9B%AE%E6%A0%87%E4%B8%AD%E6%96%AD%EF%BC%89%EF%BC%9F.png)
nginx wiki 指出:
break - 完成当前重写指令的处理,非重写处理仅在当前位置块内继续。
这是否意味着:
如果重写模式匹配,则处理重写(重写到目标)但不处理位置块中的任何其他规则,并处理位置块中的所有其他(缓存,代理等)指令?
我正在谈论中断标志如下:
图案目标标志
不是“break;”指令。
更新:
我考虑使用它的场景如下,一个具有多个重写的简单位置:
location /path/ {
rewrite ^/user_request_one$ /target_one;
rewrite ^/user_request_two$ /target_two;
... other directives ...
}
也许我不完全了解 nginx 如何处理重写,但在上面,如果 target_one 匹配,nginx 还会测试重写规则 target_two 吗?向 target_one 添加 break 标志是否会指示 nginx 停止解析任何进一步的重写规则?
我之所以问这个问题,主要原因是我们有一些位置块,其中包含许多重写规则,而且我不确定 nginx 是否会在“更下方”测试重写模式,即使其中一个重写模式在“顶部附近”匹配。这些重写非常独特,因此如果一个重写被匹配,nginx 绝对没有理由在同一位置块中测试任何其他重写模式。我们只是想确保我们不会浪费任何宝贵的 CPU 周期,因为这是一个负载相当高的服务器。
希望这可以帮助。
谢谢。
答案1
HttpRewriteModule 页面上有一个很好的解释:http://wiki.nginx.org/HttpRewriteModule#rewrite
首先看一下“nginx 如何处理请求”可能是一个好主意:http://nginx.org/en/docs/http/request_processing.html
编辑:是的,你的解释是 break 的作用
break 将使请求处理保持在同一位置指令内,这样即使重写路径在正常情况下(即直接请求)由不同的位置指令处理,您也可以强制执行其处理方式。请注意,这仅在位置指令内使用时才会发生。
抱歉,我无法进一步阐述,因为我要出门了,但您可以随时询问我答案中任何部分的详细信息。