使用 lua 在 nginx 中传递捕获的请求

使用 lua 在 nginx 中传递捕获的请求

我正在做这样的事情:

location /foo {
        content_by_lua_block {
            local reqType = ngx.var.request_method
            if reqType == "POST"
                res = ngx.location.capture("/bar")
            else
                res = ngx.location.capture("/baz")
            end
            ngx.say(res.body)
        }
    }

    location /bar {
        internal;
        #fastcgi, omitted
    }

    location /baz{
        internal;
        #fastcgi, omitted
    }
}

但是 PHP 发送的标头丢失了,状态代码始终为 200。有没有办法只发送原始响应?ngx.say()只输出响应主体,我需要捕获整个请求并将其发送到浏览器。

我在用着openresty/1.9.15.1

编辑:我发现了一个方式来做到这一点,但如果存在任何其他方法来做到这一点,将不胜感激。

答案1

使用响应属性可以实现这一点:

response = ngx.location.capture("/bar")
for headerName, header in pairs(response.header) do
    ngx.header[headerName] = header
end
ngx.status = response.status
ngx.say(response.body)
ngx.exit(response.status)

相关内容