nginx proxy_pass url有条件地使用GET参数

我有一个urlhttp://foo.com/banana ,我有另一个urlhttp://foo.com/banana?a=1&b=2

我喜欢所有的/banana路线由我的本地nginx处理,但我想任何香蕉路线与GET PARAMS被代理http://bar.com

所以:

http://foo.com/banana – > http://foo.com/banana

http://foo.com/banana?a=1 – > (proxy) – > http://bar.com/banana?a=1

我应该注意到这不是生产。 我正在尝试在开发过程中将api调用redirect到另一台服务器。

我试图做一个“如果参数”块,但我不能做一个if块的proxy_pass 。 我想重写一下: http://foo.com/banana?a=1 : http://foo.com/banana?a=1 a http://foo.com/banana?a=1 – > http://foo.com/proxy?a=1

 location /proxy { proxy_pass http://bar.com; } 

但是我没有上面的逻辑,因为bar.com期待着/banana路线。

有任何想法吗?

由于这不是生产,你可以坚持你原来的“如果”的解决方案。 你只需要从“if”块中跳出就可以使用proxy_pass,这可以用传统的方法轻松完成:

 location /banana { error_page 418 = @good_old_fallback; if ($args) { return 418; } } location @good_old_fallback { proxy_pass http://bar.com; } 

你使用其他位置的想法也可以,所以如果你更喜欢它,你可以这样做:

 location /banana { if ($args) { rewrite ^/banana(.*)$ /proxy$1 last; } } location /proxy { internal; rewrite ^/proxy(.*)$ /banana$1 break; proxy_pass http://bar.com; }