我需要此位置块来路由到两个不同的后端端点
location ~* /zones/
它必须具有使这些重写成功的逻辑:
/zones/appinfo.axd >>> /zones/appinfo.axd
/zones/api/v2/zones >>> /api/v2/zones
以下是我目前拥有的:
location ~* /zones/ {
proxy_set_header Host $http_host;
proxy_set_header Connection "";
rewrite ^ /api/v2/zones break;
proxy_pass http://zone_api;
}
然而它只适用于第二次重写
答案1
我假设你想要这样的东西:
location ~ ^/zones(/api.+)$ {
proxy_set_header Host $http_host;
proxy_set_header Connection "";
proxy_pass http://zone_api$1;
}
location /zones {
proxy_set_header Host $http_host;
proxy_set_header Connection "";
proxy_pass http://zone_api;
}
第一个location
使用正则表达式捕获部分信息变量后的字符串/zones
,然后将该变量用于proxy_pass
目标。
第二个位置是简单的前缀匹配,它将 URL 路径按原样传递给proxy_pass
。
答案2
为每个单独的 URL 使用一个位置和别名。
location /zones/appinfo.axd {
alias /zones/appinfo.axd;
}
location /zones/api/v2/zones {
alias /api/v2/zones;
}
请注意,这是针对您指定的确切 URL。您没有包含任何通配符或子文件夹要求,只是包含那些确切的 URL。