Nginx重新路由代理响应

时间:2015-07-10 11:52:35

标签: nginx lua

我想知道我是否可以使用nginx实现以下场景:

  1. 接受发布请求(文件上传)并将代理传递给某个后端服务器“A”。
  2. 从代理服务器“A”获取响应并将其发布到另一个后端服务器“B”。
  3. 最后从服务器“B”获取响应并将其发送给客户端。
  4. 我想我不能用nginx ootb做到这一点,但是lua脚本能做到吗?

    (如果你想知道我们试图实现什么:客户端将文件发送到我们的FE服务器(nginx),它只将文件发送到文件服务器(服务器“A”),然后我们需要取文件服务器响应并通过另一台服务器“B”运行它,为用户建立一个很好的响应。

    THX。

2 个答案:

答案 0 :(得分:1)

所以使用nginx lua模块就是我想出来的:

location /upload {
    lua_need_request_body on;
    set $upres "";
    rewrite_by_lua '
        local res = ngx.location.capture("/doupload", {method = ngx.HTTP_POST, always_forward_body = true })
        ngx.var.upres = res.body
    ';

    content_by_lua '
        local res = ngx.location.capture("/afterupload", { method = ngx.HTTP_POST, body = ngx.var.upres })
        if res.status == 200 then
            ngx.print(res.body)
        end
    ';
}

location /doupload {
    proxy_pass http://ServerA;
}

location /afterupload {
    proxy_pass http://ServerB;
}

答案 1 :(得分:0)

使用Nginx反向代理服务器是不可能的。

您可以使用Web服务从server-A调用server-B来解析响应。