Nginx 使用ngnix配置代理传递多个参数

Nginx 使用ngnix配置代理传递多个参数,nginx,proxypass,Nginx,Proxypass,我需要为下面的url模式设置proxy_pass location ~ ^/hosts/bu/(.*)/app/(.*)$ { proxy_pass http://appserver.cnma.com:3000/hosts/bu/$1/app/$2; } 当我尝试使用URL时,它没有正确地传递第二个参数。请告诉我哪里出了问题。或者说: 如果在未指定URI的情况下指定了proxy_pass,则在处理原始请求时,请求URI将以与客户端发送的相同的形式传递给服务器,或者在处理更改的URI时

我需要为下面的url模式设置proxy_pass

location  ~ ^/hosts/bu/(.*)/app/(.*)$ {
  proxy_pass   http://appserver.cnma.com:3000/hosts/bu/$1/app/$2;
}
当我尝试使用URL时,它没有正确地传递第二个参数。请告诉我哪里出了问题。

或者说:

如果在未指定URI的情况下指定了proxy_pass,则在处理原始请求时,请求URI将以与客户端发送的相同的形式传递给服务器,或者在处理更改的URI时传递完整的规范化请求URI:

location /some/path/ {
    proxy_pass http://127.0.0.1;
}
因此,有足够的理由:

proxy_pass http://appserver.cnma.com:3000$request_uri;

在使用正则表达式时,可以在nginx中使用命名捕获

location  ~ ^/hosts/bu/(.*)/app/(.*)$ {
  proxy_pass   http://appserver.cnma.com:3000/hosts/bu/$1/app/$2;
}
您可以像这样将块修改到下面

location  ~ ^/hosts/bu/(?<loc1>.+)/app/(?<loc2>.+)$ {
  proxy_pass   http://appserver.cnma.com:3000/hosts/bu/$1/app/$loc2;
}
location~^/hosts/bu/(?。+)/app/(?。+)${
代理通行证http://appserver.cnma.com:3000/hosts/bu/$1/应用程序/$2;
}

任何反对简单
位置/hosts/bu/{proxy\u pass的理由http://appserver.cnma.com:3000 }
?您能提供一个您试图呼叫的URL的示例吗?谢谢@Alexey。让我试试这个解决方案,然后将结果返回给您。如果url参数在浏览器中进行编码,那么在编码打开的情况下,proxy_pass会重定向吗?我看到在使用prosy_通行证时,编码被删除。请解释一下。似乎你想保持原始URI不变,尝试附加$request\u URI,我更新了上面的答案