【问题标题】:NGINX proxy pass a portion of the request URLNGINX 代理传递部分请求 URL
【发布时间】:2020-06-10 07:04:39
【问题描述】:

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

请求网址

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

我想把这个代理传递给

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";
}

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

【问题讨论】:

    标签: nginx proxypass


    【解决方案1】:

    这真的很简单:

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

    详情请阅读this Q/A。

    更新

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

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

    location /path1/path2 {
        rewrite ^/path1(.*) $1 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;
    

    在位置块内。

    【讨论】:

    • 您好伊万,感谢您的评论。我忘了说明为什么我也不能这样做。我刚刚用附加说明修改了问题。
    猜你喜欢
    • 2016-11-15
    • 2016-05-28
    • 2014-05-10
    • 2018-05-06
    • 2022-07-13
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 2015-12-27
    相关资源
    最近更新 更多