2017-02-16 210 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

相關問題