【问题标题】:nginx locations with similar prefixes具有相似前缀的 nginx 位置
【发布时间】:2019-01-31 21:45:01
【问题描述】:

我正在尝试配置 nginx 以提供不同版本的 Angular SPA,通常以“dev”或“prod”为前缀,但位置为“dev”和“prod”,但我不想要nginx 暴露未配置的目录(在 nginx.conf 中)。

例如,

http://myserver/dev  
http://myserver/dev-SomeFeatureBranch

如果我使用精确匹配(= 修饰符),我无法到达 /dev 或 /dev-SomeFeatureBranch 以下的任何内容,所以这不是一个选项。

如果我不指定修饰符,我会得到前缀匹配,这有点用,但会暴露我未在我的 nginx.conf 中配置的其他分支

例如,如果我在与其他 Dev 分支相同的目录中有一个名为“dev-SomePrivateBranch”的目录,并且我使用以下配置:

    location / {
        root   ../www;
    }
    location /dev {
        alias ../dev;
    }

    location /dev-SomeFeatureBranch {
        alias ../dev-SomeFeatureBranch;
    }

我可以有效地到达http://myserver/dev-SomePrivateBranch,因为它匹配“/dev”,但我不想到达我没有明确配置的位置。

加上斜杠的问题,我希望http://myserver/dev/http://myserver/dev 一样工作

一旦你习惯了 nginx 的方式,我相信这非常简单,但我似乎无法让它为我的生活工作。

【问题讨论】:

    标签: nginx


    【解决方案1】:

    如果您希望您的位置引用单个目录名称而不是碰巧以相同字符开头的一组随机目录名称,则需要使用结尾的 /

    例如:

    location / {
        root  ../www;
    }
    location /dev/ {
        alias ../dev/;
    }
    location /dev-SomeFeatureBranch/ {
        alias ../dev-SomeFeatureBranch/;
    }
    

    请注意,locationalias 指令都应以 / 结尾。


    alias 可能是不必要的,因为如果位置名称和目录名称相同,root ..; 应该可以工作。

    例如:

    location / {
        root  ../www;
    }
    location /dev/ {
        root  ..;
    }
    location /dev-SomeFeatureBranch/ {
        root  ..;
    }
    

    我不喜欢 rootalias 的相对路径,但如果你喜欢的话,它应该仍然可以工作。


    管理/dev/dev/ 的有效解决方案是从一个重定向到另一个。如果目录存在,Nginx 会自动执行此操作。但在您的情况下,这并不明显,因为初始 URI 是在 location / 块中处理的。您可以通过显式重定向来解决问题。

    例如:

    location / {
        root  ../www;
    }
    location = /dev { return 301 /dev/; }
    location /dev/ {
        root  ..;
    }
    location = /dev-SomeFeatureBranch { return 301 /dev-SomeFeatureBranch/; }
    location /dev-SomeFeatureBranch/ {
        root  ..;
    }
    

    最后,如果所有 location 块的根都相同,那么您也可以使用正则表达式,在这种情况下,整个解决方案可以包装成一个表达式。

    例如:

    location / {
        root  ../www;
    }
    location ~ ^/dev(|-SomeFeatureBranch)($|/) {
        root  ..;
    }
    

    请注意,正则表达式 location 块的计算顺序很重要。详情请见this document

    【讨论】:

    • 谢谢!这完全符合预期,也非常感谢您的额外解释,我现在明白了!
    猜你喜欢
    • 2014-01-30
    • 2015-08-18
    • 1970-01-01
    • 2020-05-26
    • 2021-12-15
    • 2022-11-07
    • 2021-08-29
    • 2013-04-09
    • 2021-08-20
    相关资源
    最近更新 更多