你好,我有几个地点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
块中的其他配置。