Nginx的last和break的区别
Eave
2026.08.27
一、last标志
作用:完成当前重写规则后,停止当前 location 块中的后续重写指令,并使用重写后的新 URL 重新开始匹配 所有的 location 块。
执行流程:
匹配到rewrite规则,执行重写。
停止当前location内的后续重写。
用新URL再次进行全局的location匹配。
示例场景:
/old/重写为/new/后,会进入location /new/块处理。
server
{
location /
{
rewrite ^/old/(.*)$ /new/$1 last; # 重写后重新匹配 Location
}
location /new/
{
# 最终会到这里处理
}
}
二、break标志
作用:完成当前重写规则后,完全停止整个重写阶段的处理(不再执行任何后续重写指令),并且不会重新匹配 location。
执行流程:
匹配到rewrite规则,执行重写。
停止所有重写阶段指令。
直接用重写后的URI继续当前location内的后续处理(如proxy_pass)。
示例场景:
/old/重写为/new/后,不会再去匹配location /new/,而是直接在当前location内用/new/进行代理转发。
server
{
location /
{
rewrite ^/old/(.*)$ /new/$1 break; # 停止重写循环
proxy_pass http://backend; # 直接使用重写后的路径代理
}
}
三、总结
last:重写后立即停止当前location的后续指令,并重新匹配其他location继续处理。
break:重写后在当前location继续处理后续指令,不重新匹配其他location。