Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有类似前缀的nginx位置_Nginx - Fatal编程技术网

具有类似前缀的nginx位置

具有类似前缀的nginx位置,nginx,Nginx,我正在尝试将nginx配置为服务于Angular SPA的不同版本,通常前缀为“dev”或“prod”,但位置为“dev”和“prod”,但我不希望nginx公开未配置的目录(在nginx.conf内) 比如说, http://myserver/dev http://myserver/dev-SomeFeatureBranch 如果使用精确匹配(=修饰符),则无法访问/dev或/dev SomeFeatureBranch下的任何内容,因此这不是一个选项 如果我没有指定一个修饰符,我会得到前

我正在尝试将nginx配置为服务于Angular SPA的不同版本,通常前缀为“dev”或“prod”,但位置为“dev”和“prod”,但我不希望nginx公开未配置的目录(在nginx.conf内)

比如说,

http://myserver/dev  
http://myserver/dev-SomeFeatureBranch
如果使用精确匹配(=修饰符),则无法访问/dev或/dev SomeFeatureBranch下的任何内容,因此这不是一个选项

如果我没有指定一个修饰符,我会得到前缀匹配,它可以工作,但会暴露我在nginx.conf中没有配置的其他分支

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

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

    location /dev-SomeFeatureBranch {
        alias ../dev-SomeFeatureBranch;
    }
我可以有效地访问,因为它与“/dev”匹配,但我不想访问我没有明确配置的位置

再加上尾部斜杠的问题,我也希望能工作


我敢肯定,一旦你习惯了nginx的方式,这会非常简单,但我似乎无法让它在我的一生中发挥作用。

如果你想让你的位置指向一个目录名,而不是一组碰巧以相同字符开头的随机目录名,你需要使用一个尾随的
/

例如:

location / {
    root  ../www;
}
location /dev/ {
    alias ../dev/;
}
location /dev-SomeFeatureBranch/ {
    alias ../dev-SomeFeatureBranch/;
}
location / {
    root  ../www;
}
location /dev/ {
    root  ..;
}
location /dev-SomeFeatureBranch/ {
    root  ..;
}
location / {
    root  ../www;
}
location = /dev { return 301 /dev/; }
location /dev/ {
    root  ..;
}
location = /dev-SomeFeatureBranch { return 301 /dev-SomeFeatureBranch/; }
location /dev-SomeFeatureBranch/ {
    root  ..;
}
location / {
    root  ../www;
}
location ~ ^/dev(|-SomeFeatureBranch)($|/) {
    root  ..;
}
请注意,
位置
别名
指令都应以
/
结尾


别名可能是不必要的,因为
应起作用

例如:

location / {
    root  ../www;
}
location /dev/ {
    alias ../dev/;
}
location /dev-SomeFeatureBranch/ {
    alias ../dev-SomeFeatureBranch/;
}
location / {
    root  ../www;
}
location /dev/ {
    root  ..;
}
location /dev-SomeFeatureBranch/ {
    root  ..;
}
location / {
    root  ../www;
}
location = /dev { return 301 /dev/; }
location /dev/ {
    root  ..;
}
location = /dev-SomeFeatureBranch { return 301 /dev-SomeFeatureBranch/; }
location /dev-SomeFeatureBranch/ {
    root  ..;
}
location / {
    root  ../www;
}
location ~ ^/dev(|-SomeFeatureBranch)($|/) {
    root  ..;
}
我不喜欢
根目录
别名
的相对路径,但如果您喜欢的话,它仍然可以工作


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

例如:

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

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

例如:

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

请注意,正则表达式
location
块的求值顺序非常重要。有关详细信息,请参阅。

谢谢!这完全符合预期,也非常感谢您的额外解释,我现在明白了!