避免nginx在proxy_pass上转义查询参数

时间:2013-10-06 09:51:20

标签: 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没有查询参数,它就可以正常工作,但是只要它们这样做,就会在上游服务器上出现错误,例如Could not find path: /records%3fname=hoegh.io

此处的%3f是一个编码为?的网址,由于它是由URL编码的,因此上游服务器无法识别它。这可能会被延迟,但我希望有可能让nginx正确处理这个问题(即在将URL传递给代理之前不要转义URL)。

有什么想法吗?

2 个答案:

答案 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;
}