避免nginx在代理\u过程上转义查询参数

避免nginx在代理\u过程上转义查询参数,nginx,reverse-proxy,Nginx,Reverse Proxy,我要在域上代理/api,我有这个位置块 location ^~ /api/ { rewrite_log on; rewrite ^/api/(.*) /$1$is_args$args break; proxy_pass http://127.0.0.1:1337; } 只要URL没有查询参数,它就可以正常工作,但一旦URL有了查询参数,我就会在上游服务器上出现如下错误找不到路径:/records%3fname=hoegh.io 这里讨论的%3f是一个URL编码的?,由于

我要在域上代理
/api
,我有这个位置块

location ^~ /api/ {
    rewrite_log on;
    rewrite ^/api/(.*) /$1$is_args$args break;
    proxy_pass http://127.0.0.1:1337;
}
只要URL没有查询参数,它就可以正常工作,但一旦URL有了查询参数,我就会在上游服务器上出现如下错误
找不到路径:/records%3fname=hoegh.io

这里讨论的
%3f
是一个URL编码的
,由于它是URL编码的,上游服务器无法识别它。这可能有点迟钝,但我希望能够让nginx正确处理这个问题(即在将URL传递给代理之前不要转义URL)


有什么想法吗?

你试过这个吗?通常不需要添加查询字符串,因为Nginx会自动添加查询字符串:

rewrite ^/api/(.*) /$1? break;

你不需要做任何事$args会自动传递

如果要修改传递的$args,必须重写

set $args "foo=bar";
比如说

工作解决方案应如下:

location ^~ /api/ {
    rewrite_log on;
    rewrite ^/api/(.*) /$1 break;
    proxy_pass http://127.0.0.1:1337;
}

我之前确实有过,但后来似乎根本没有传递查询字符串。对不起,我的错。我忘了在重定向字符串的末尾键入
,提供的解决方案对您有效吗?请接受我的回答,“弱智”在这里是一个不幸的贬义词。