2017-02-16 53 views
0

目标:站起来服务将接受请求使用nginx将请求代理到两个不同的服务?

http://foo.com/a 

和转身代理该请求将两种不同的服务

http://bar.com/b 
http://baz.com/c 

的背景是,我使用的是服务,可以通过接受发布请求与其他第三方服务集成,然后通过发布到URL将事件回调发布到该第三方服务。麻烦的是,它只支持配置中的单个URL,因此以这种方式集成多个服务变得不可能。

我已经研究过其他服务,如webhooks.io(waaaay对于中等流量而言过于昂贵)和reflector.io(测试版 - 以适量的流量摔倒),但到目前为止没有任何东西符合我的需求。所以我开始为自己的服务而努力,我希望尽可能的放手。感觉就像nginx的应该是能够做到这一点......

我碰到下面的代码片段,其别人归类为一个错误,但感觉就像我想要的东西开始:

upstream apache { 
    server 1.2.3.4; 
    server 5.6.7.8; 
} 
... 
location/{ 
    proxy_pass http://apache; 
} 

而不是轮询请求到Apache,这显然会发送相同的请求到这两个Apache服务器,这听起来很有希望。麻烦的是,它将它发送到两台服务器上的相同路径。在我的情况下,这两种服务将具有不同的路径(/ b和/ c),并且它们与入站请求(/ a)路径都不相同(/ a)

因此...任何指定每个服务器在上游配置,还是其他一些聪明的方式做到这一点?

回答

0

您可以创建本地服务器。本地服务器proxy_pass添加不同的路径(b,c)。

upstream local{ 
    server 127.0.0.1:8000; 
    server 127.0.0.1:8001; 
} 
    location/{ 
     proxy_pass http://local ; 
    } 
server { 
    listen 8000; 
    location/{ 
     proxy_pass http://1.2.3.4/b; 
    } 
server { 
    listen 8001; 
    location/{ 
     proxy_pass http://5.6.7.8/c; 
} 
+0

不错!这做了我想要做的事情,不幸的是,我之前找到的上游作品似乎并未传播请求。它看起来像循环它们,因为只有其中一个获得请求。不知道这是否是一个关闭的bug。 – Gatos

相关问题