Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NGINX代理传递请求URL的一部分_Nginx_Proxypass - Fatal编程技术网

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

NGINX代理传递请求URL的一部分,nginx,proxypass,Nginx,Proxypass,我希望在我的NGINX配置中执行以下操作:我希望代理传递路径和查询参数,但不包括第一个路径参数(path1) 请求URL https://my-domain.com/path1/path2?query1=some-查询 我想把这个传给你 http://localhost:8000/path2?query1=some-查询 我已尝试使用以下位置块 location /path1/path2/ { proxy_pass http://localhost:8000$request_uri; p

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

请求URL

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

我想把这个传给你

http://localhost:8000/path2?query1=some-查询

我已尝试使用以下位置块

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(.*) $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;
在位置块中。

这非常简单:

location /path1/ {
    proxy_pass http://localhost:8000/;
    proxy_http_version 1.1;
}
详情请参阅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;

在位置块内。

你好,伊万,谢谢你的评论。我忘了说明为什么我也不能这样做。我刚刚用一个附加的注释修改了这个问题。嗨,伊万,谢谢你的评论。我忘了说明为什么我也不能这样做。我刚刚补充了一条,修改了这个问题。