【问题标题】:How to make nginx to stop processing other rules and serve a specific location?如何让 nginx 停止处理其他规则并服务于特定位置?
【发布时间】:2019-07-18 05:58:17
【问题描述】:

我的这个配置在空的server { } 定义中按预期工作

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

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

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

如何强制 Nginx 使用这个位置?

【问题讨论】:

    标签: nginx


    【解决方案1】:

    您可能正在寻找break

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

    来自HttpRewriteModule documentation

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

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

    请注意,外部位置块,last 和 break 实际上是 一样。

    【讨论】:

    • 它是用于重写规则,而不是用于位置指令。
    • 事实上,break 是从重写模块中保存我的配置的原因,它超出了我的^~ 位置,并在我不想要它时处理了我的 php 重写正则表达式。
    【解决方案2】:

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

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

    【讨论】:

    • 你的第二句话无法辨认。
    • 我的意思是如果到期标题列在单独的公共块下,那么它们将不适用于使用location ^~的这个块
    【解决方案3】:
    location = /aliasname/ { 
      alias /path/to/alias/
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-02
      • 2018-07-14
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      • 2016-09-08
      相关资源
      最近更新 更多