0

我要代理/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 编码?,并且由于它是 URL 编码的,上游服务器无法识别它。这可能会有所延迟,但我希望有可能让 nginx 正确处理这个问题(即在将 URL 传递给代理之前不要转义它)。

有任何想法吗?

4

2 回答 2

1

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

rewrite ^/api/(.*) /$1? break;
于 2013-10-06T11:01:28.330 回答
1

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

如果您希望修改传递的 $args,您必须覆盖。

set $args "foo=bar";

例如。

工作解决方案应如下所示:

location ^~ /api/ {
    rewrite_log on;
    rewrite ^/api/(.*) /$1 break;
    proxy_pass http://127.0.0.1:1337;
}
于 2016-10-28T19:01:05.260 回答