如何使 NGINX 反向代理以 HTTP header 值为条件

How can I make NGINX reverse proxy conditional on HTTP header value

我有这样的反向代理:

server {
    listen 8080;

    location = /my-proxy {
      proxy_pass https://somehost/v1
    }
}

现在,如果 HTTP 请求 header x-version-toggle 设置为 v2,我想将其传递给 /v2,如下所示:

server {
    listen 8080;

    location = /my-proxy {
      if ($http-x-version-toggle == 'v2') {
        proxy_pass https://somehost/v2
      }
      proxy_pass https://somehost/v1
    }
}

实现此目的的精确语法是什么?

可以使用nginx提供的map算子

map $http_x_version_toggle $backend {
        default http://10.41.115.241:8000/; 
        v2 http://127.0.0.1:9101/;
}

然后在位置使用如下

proxy_pass $backend