2017-09-17 99 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

相关问题