nginx proxy_pass url 有条件地获取参数
nginx proxy_pass url with GET params conditionally
我有一个urlhttp://foo.com/banana
还有一个urlhttp://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 调用以在开发期间重定向到另一台服务器。
我试过做一个 'if 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
路线。
有什么想法吗?
由于这不是用于生产,您可以坚持原来的 "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 last;
}
}
location /proxy {
internal;
rewrite ^/proxy(.*)$ /banana break;
proxy_pass http://bar.com;
}
我有一个urlhttp://foo.com/banana
还有一个urlhttp://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 调用以在开发期间重定向到另一台服务器。
我试过做一个 'if 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
路线。
有什么想法吗?
由于这不是用于生产,您可以坚持原来的 "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 last;
}
}
location /proxy {
internal;
rewrite ^/proxy(.*)$ /banana break;
proxy_pass http://bar.com;
}