本文发布于Cylon的收藏册,转载请著名原文链接~
场景
在配置代理后,GET 请求的变量全部失效,配置如下
location /fw {
proxy_pass http://127.0.0.1:2952;
}
我的需求是,/fw/
的都发往 2952端口,但实际情况是404,原因为“在没有指定 URI 的情况下,在1.12版本后会传递原有的URI” 这时会导致一个404错误,因为我的后端接口本身就是 /fw/xxx/
会出现重复
接下来做了一个变量传递
location ~* /fw/(?<section>.*) {
proxy_pass http://127.0.0.1:2952/fw/$section;
}
这时存在一个问题,就是 GET 请求的变量无法传递过去
解决
nginx 官方给出一个样例,说明了,存在某种情况下,nginx 不会确定请求 URI 中的部分参数
- 使用正则表达式时
- 在 localtion 名称内
例如,在这个场景下,proxy_pass 就会忽略原有的请求的URI,而将拼接后的请求转发
location /name/ {
rewrite /name/([^/]+) /users?name=$1 break;
proxy_pass http://127.0.0.1;
}
那么这服务我遇到的问题,nginx官方给出了使用方式
当在 proxy_pass
中需要变量,可以使用 $request_uri;
另外也可以使用 $is_args$args
参数 来保证原有的请求参数被传递
location ~* /fw/(?<section>.*) {
proxy_pass http://127.0.0.1:2952/fw/$section$is_args$args;
}
$is_args
“
?
” if a request line has arguments, or an empty string otherwise$args
arguments in the request line
Reference
Alphabetical index of variables
本文发布于Cylon的收藏册,转载请著名原文链接~
链接:https://www.oomkill.com/2023/05/nginx-proxy_pass/
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」 许可协议进行许可。