有条件地使用GET参数的nginx proxy_pass网址

时间:2015-05-05 21:42:16

标签: nginx proxypass

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

我喜欢所有/banana路由都由我的本地nginx处理,但我喜欢任何带有GET参数的香蕉路线代理到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调用以在开发期间重定向到另一台服务器。

我试图做一个'如果args'阻止,但我无法在if块中执行proxy_pass。 我想过要改写一下: http://foo.com/banana?a=1 - > http://foo.com/proxy?a=1

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

但我没有正确的逻辑,因为bar.com期待/banana路线。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

由于这不适用于制作,您可以坚持使用原始的“if”解决方案。你只需要从“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;
}