NGINX 代理传递请求 URL 的一部分

Kay*_*Bay 3 nginx proxypass

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

请求网址

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;
}
Run Code Online (Sandbox Code Playgroud)

但是,这不会到达正确的端点,因为我认为它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;
}
Run Code Online (Sandbox Code Playgroud)

附加编辑:

我也不能简单地做

location /path1/ {
  proxy_pass http://localhost:8000/;
  proxy_http_version 1.1;
}
Run Code Online (Sandbox Code Playgroud)

因为我已经有了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";
}
Run Code Online (Sandbox Code Playgroud)

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

Iva*_*sky 5

这真的很简单:

location /path1/ {
    proxy_pass http://localhost:8000/;
    proxy_http_version 1.1;
}
Run Code Online (Sandbox Code Playgroud)

阅读问答了解详细信息。

更新

在 OP 澄清他的问题后,该解决方案不再可用。

如果所有附加路径共享公共后缀path2

location /path1/path2 {
    rewrite ^/path1(.*) $1 break; # remove '/path1' URI prefix
    proxy_pass http://localhost:8000;
    proxy_http_version 1.1;
}
Run Code Online (Sandbox Code Playgroud)

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

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

set $args query1=some-query;
Run Code Online (Sandbox Code Playgroud)

在位置块内。