我有一个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; }