是否可以合并多个响应并在NGINX中发送一个响应
我有一个虚拟机上运行的Nginx/openresty和一些其他服务。基本上,VM在Openresty上接受请求,然后将请求转发给适当的服务。例如低于请求分别转发到ServiceA,ServiceB和ServiceC。它工作正常。是否可以合并多个响应并在NGINX中发送一个响应
现在我需要暴露一个新的端点可能从所有服务A,B和C得到的答复,然后返回一个统一的回应。
我不能在我的位置使用多个proxy_pass,有人可以建议我怎么做到这一点?例如
http://server:80/services/refALL - >返回来自A,B和C服务的综合响应。
你可以像下面这样做。基本上,你捕获其他服务的响应,然后将它们结合起来
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)
}
}
这很完美。我只需要用大括号替换单引号。但它效果很好。当状态为200时,它的工作正常。但需要查看一个apis的http状态码是否不是200,那么需要单独报告。 – Yogi
@Yogi,是的,我错误地混合了'content_by_lua'和'content_by_lua_block'语法,现在在回答中进行了更正。对于呼叫失败,您只需检查'respA.status'并根据状态采取行动。 –
太好了。所以当最后ngx.say语句执行。我可以为此确定http状态码吗?实际上,如果至少有一次电话失败,我想返回NOT SUCCESS。目前它只是返回200 OK。我怎样才能返回500. – Yogi
这里返回什么样的响应? HTML,JSON,文本文件?合并过程如何工作? –
这将是简单的回应。大多数HTML或只是文本字符串 – Yogi