2

nginx rewrite的break于last区别

示例nginx配置

location /test/break {  # break测试 location1
  rewrite ^.*/test(.*)$ "/here" break;
}

location /test/last {   # last测试 location2
  rewrite ^.*/test(.*)$ "/here" last;
}

location /here {    # 正常地址 location3
  default_type text/html;
  return 200 "<h1>ok</h1>";
}

1.首先测试下break, 请求/test/break,结果如下图
QQ截图20191021143157.png

请求/test/break 匹配到location1,然后地址重写为/here,返回404,表示没有再次匹配location

2.测试last, 请求/test/last,结果如下图
QQ截图20191021143221.png

请求/test/break 匹配到location2,然后地址重写为/here,正常返回ok页面,表示重写后又再次匹配所有location

总结

break表示重写后停止不再匹配,last表示重写后跳到server块再次用重写后的地址匹配

用途

1.break一般用于接口重定向,例如将http://127.0.0.1/down/123.xls...://192.168.0.1:8080/file/123.xls(解决跨域下载)

location /down {
  rewrite ^/down(.*)$ "http://192.168.0.1:8080/file$1" break;
}

2.last用于请求路径发生改变的常规需求,例如将http://127.0.0.1/request/getlist 放在了对应 http://127.0.0.1/api/getlist

location /request {
  rewrite ^/request(.*)$ "/api" last;
}

location /api {
  default_type Application/json;
  return 200 '{"code":0,data:[1,2,3]}';
}

zpfei
186 声望7 粉丝

往事如风~