NGINX 代理传递部分请求 URL

NGINX proxy pass a portion of the request URL

我想在我的 NGINX 配置中执行以下操作:我想代理传递路径和查询参数但不包括第一个路径参数 (path1)。

请求URL

https://my-domain.com/path1/path2?query1=some-query

我想要这个 proxy_pass 到

http://localhost:8000/path2?query1=some-query

我已尝试使用以下位置块

location /path1/path2/ {
  proxy_pass http://localhost:8000$request_uri;
  proxy_http_version 1.1;
}

但是,这不会转到正确的端点,因为我认为它也包含 path1 参数。我有几个不同的 path2 路由,所以我希望能够轻松地捕获并重定向它们 - 而不必像这样手动定义每个路由:

location /path1/path2a/ {
  proxy_pass http://localhost:8000/path2a?query1=some-query;
  proxy_http_version 1.1;
}

location /path1/path2b/ {
  proxy_pass http://localhost:8000/path2b?query1=some-query;
  proxy_http_version 1.1;
}

location /path1/path2c/ {
  proxy_pass http://localhost:8000/path2c?query1=some-query;
  proxy_http_version 1.1;
}

附加编辑:

我也做不到

location /path1/ {
  proxy_pass http://localhost:8000/;
  proxy_http_version 1.1;
}

因为我已经有 location /path1/ 块升级到不同端点的 WebSocket 连接:

location /path1/ {
  proxy_pass http://localhost:9000/;
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "Upgrade";
}

我在网上搜索了很多,但找不到适合我的特定场景的配置。

这真的很简单:

location /path1/ {
    proxy_pass http://localhost:8000/;
    proxy_http_version 1.1;
}

阅读 Q/A 了解详情。

更新

在OP澄清了他的问题后,此解决方案无法使用。

如果所有附加路径共享共同的后缀 path2:

location /path1/path2 {
    rewrite ^/path1(.*)  break; # remove '/path1' URI prefix
    proxy_pass http://localhost:8000;
    proxy_http_version 1.1;
}

如果不是,请将 location /path1/path2 替换为 location ~ ^/path1/(?:path2a|path2b|path2c)

如果您需要向后端传递与请求附带的不同的查询参数,请使用

set $args query1=some-query;

在位置块内。