使用NGINX作为反向代理时后端服务收不到“&”

问题描述 投票:0回答:1

我使用NGINX作为反向代理,通过动态映射将请求转发到正确的后端。

这是我的地图指令

map $arg_action $backend {    
"~^nginx/.*" nginx-web;
"~^httpd/.*" httpd-web;
}

我通过以下方式将流量代理到正确的上游:

location /data {    
proxy_redirect off;     
proxy_bypass http://$backend/$arg_action; 
}

我触发的 API 是:

 /data?action=httpd/v1/CompareAnimals?animal=cat&bird=high

httpd 服务获取以下 API:

httpd/v1/CompareAnimals?animal=cat, NGINX will not bypass anything after "&" character

如何让 httpd 服务在触发时获取完整的 API?比如:

httpd/v1/CompareAnimals?animal=cat&bird=high

而且不仅

httpd/v1/CompareAnimals?animal=cat
nginx special-characters nginx-reverse-proxy nginx-config
1个回答
0
投票

似乎你应该使用

proxy_pass
而不是
proxy_bypass
,只需添加
$args
$is_args
由 NGINX 提供的变量

location /data {
    proxy_redirect off;
    proxy_pass http://$backend/$arg_action$is_args$args;
}
© www.soinside.com 2019 - 2024. All rights reserved.