我在域上代理/api
,我有这个位置块。
location ^~ /api/ {
rewrite_log on;
rewrite ^/api/(.*) /$1$is_args$args break;
proxy_pass http://127.0.0.1:1337;
}
只要URL没有查询参数,它就可以正常工作,但是只要它们这样做,就会在上游服务器上出现错误,例如Could not find path: /records%3fname=hoegh.io
此处的%3f
是一个编码为?
的网址,由于它是由URL编码的,因此上游服务器无法识别它。这可能会被延迟,但我希望有可能让nginx正确处理这个问题(即在将URL传递给代理之前不要转义URL)。
有什么想法吗?
答案 0 :(得分:1)
你试过这个吗?当Nginx自动添加查询字符串时,通常不需要添加查询字符串:
rewrite ^/api/(.*) /$1? break;
答案 1 :(得分:1)
你不需要做任何事情。 $ args会自动传递。
如果你想修改传递的$ args,你必须覆盖。
set $args "foo=bar";
例如。
工作解决方案应如下:
location ^~ /api/ {
rewrite_log on;
rewrite ^/api/(.*) /$1 break;
proxy_pass http://127.0.0.1:1337;
}