组合nginx中几个proxy_pass位置路径

组合nginx中几个proxy_pass位置路径

你好,我有几个地点proxy_pass,例如:

location /v1 {
    proxy_pass http://localhost:8080/myapp/v1;
    # other stuff
}
location /v2 {
    proxy_pass http://localhost:8080/myapp/v2;
    # other stuff
}
location /beta {
    proxy_pass http://localhost:8080/myapp/beta;
    # other stuff
}
location / {
    root C:/MyApp/build/;
}

有没有办法将前三个位置路径(v1、v2、beta)合并到一个位置配置中?因为除了结尾部分外,它们完全相同(其他内容也相同)proxy_pass。谢谢。

答案1

“其他内容”可能可以移到外部块中,这样三个location块只需要包含一个proxy_pass语句。

但你可以使用正则表达式 location匹配以/v1/v2和开头的任何 URI /beta

例如:

location ~ ^/(v1|v2|beta) {
    rewrite ^(.*)$ /myapp$1 break;
    proxy_pass http://localhost:8080;
    # other stuff
}

server请注意,正则表达式位置块的评估顺序很重要。如果您的块中唯一的其他位置块是,这不会对您造成影响location /。请参阅这个文件了解详情。

答案2

您可以使用:

location ~ ^/(?<dest>v1|v2|beta) {
    proxy_pass http://localhost:8000/myapp/$dest;
    # other stuff
}

这可能会导致一些副作用,具体取决于server块中的其他配置。

相关内容