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。