Passthrough capturou pedido em nginx com lua

1

Estou fazendo algo assim:

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
    }
}

Mas os cabeçalhos enviados pelo PHP são perdidos e o código de status é sempre 200. Existe alguma maneira de enviar a resposta original? ngx.say() apenas mostra o corpo da resposta e eu preciso capturar a solicitação inteira e enviá-la para o navegador.

Estou usando openresty/1.9.15.1

Edit: eu encontrei um caminho para fazer isso, mas se existe alguma maneira diferente de fazer isso, seria muito apreciado.

    
por IAmJulianAcosta 19.08.2016 / 06:15

1 resposta

1

Isso é possível usando as propriedades de resposta:

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)
    
por 20.08.2016 / 19:46

Tags