2017-09-17 57 views
0

我有一個虛擬機上運行的Nginx/openresty和一些其他服務。基本上,VM在Openresty上接受請求,然後將請求轉發給適當的服務。例如低於請求分別轉發到ServiceA,ServiceB和ServiceC。它工作正常。是否可以合併多個響應並在NGINX中發送一個響應

現在我需要暴露一個新的端點可能從所有服務A,B和C得到的答覆,然後返回一個統一的迴應。

我不能在我的位置使用多個proxy_pass,有人可以建議我怎麼做到這一點?例如

http://server:80/services/refALL - >返回來自A,B和C服務的綜合響應。

+0

這裏返回什麼樣的響應? HTML,JSON,文本文件?合併過程如何工作? –

+0

這將是簡單的迴應。大多數HTML或只是文本字符串 – Yogi

回答

1

你可以像下面這樣做。基本上,你捕獲其他服務的響應,然後將它們結合起來

location /services/refALL { 
    content_by_lua_block { 
     local respA = ngx.location.capture("/services/refA") 
     local respB = ngx.location.capture("/services/refB") 
     local respC = ngx.location.capture("/services/refC") 

     ngx.say(respA.body .. respB.body .. respC.body) 
    } 
} 
+0

這很完美。我只需要用大括號替換單引號。但它效果很好。當狀態爲200時,它的工作正常。但需要查看一個apis的http狀態碼是否不是200,那麼需要單獨報告。 – Yogi

+0

@Yogi,是的,我錯誤地混合了'content_by_lua'和'content_by_lua_block'語法,現在在回答中進行了更正。對於呼叫失敗,您只需檢查'respA.status'並根據狀態採取行動。 –

+0

太好了。所以當最後ngx.say語句執行。我可以爲此確定http狀態碼嗎?實際上,如果至少有一次電話失敗,我想返回NOT SUCCESS。目前它只是返回200 OK。我怎樣才能返回500. – Yogi

相關問題