如何让nginx停止处理其他规则并服务于特定位置?

时间:2012-05-22 09:59:44

标签: nginx

我的配置在空server { }定义

中按预期工作
location ^~ /foo/ {
     alias /var/www/foo/;
     }

但是当我在一个相当大的服务器定义(一个用于wordpress多站点配置)中移动它时,它将停止工作并且wordpress将响应它(这显然不是我的意图)。

我试图在服务器块的开头或结尾处放置,但这并没有改变它。

如何强制nginx使用此位置?

3 个答案:

答案 0 :(得分:23)

您可能正在寻找break

location ^~ /foo/ {
    alias /var/www/foo/;
    break;
}

来自HttpRewriteModule documentation

  

last - 完成当前重写指令的处理   通过搜索匹配重新启动进程(包括重写)   来自所有可用位置的URI。

     

break - 完成当前重写指令的处理   非重写处理在当前位置块内继续   仅

     

注意外部位置块,last和break是有效的   相同。

答案 1 :(得分:2)

Nginx中的位置块是独占的。如果您使用location ^~,则除非您将这些规则复制为嵌套在同一位置块下,否则其他规则可能不会应用静态对象的过期标头。

如果你可以分享你的完整配置,那么我可以让它适合你。您很可能需要使用嵌套的位置块。

答案 2 :(得分:0)

bg.clipTo = function(ctx) {
    ctx.save();
    ctx.rotate((angle * -1) * (Math.PI / 180));
    ctx.rect(left, top, width, height);
    ctx.restore();
    ctx.stroke();
  };

如果URI中不存在尾随斜杠,则会出现问题。 见https://www.digitalocean.com/community/tutorials/understanding-nginx-server-and-location-block-selection-algorithms#matching-location-blocks