Infelizmente, não posso comentar na postagem do cnst - por isso vou responder aqui.
O nginx_http_proxy
módulo, por padrão, conversa com o upstream no HTTP / 1.0. Isso pode ser alterado com a diretiva proxy_http_version 1.1
.
Isso também pode ser a causa do seu script retornar uma resposta HTTP / 1.0, embora a codificação em partes e o código de status 307
não existam nesta versão.
Você também não deve usar a codificação em blocos com um redirecionamento , pois isso realmente não faz sentido.
Além disso , parece que o nginx não passa pedaços do upstream para o cliente um por um, mas armazena em buffer a resposta do upstream . O Content-Length
campo do cabeçalho é ignorado porque é contra a definição. Eu tive que olhar para o código fonte do módulo, porque tudo isso parece estar sem documentos.
Você pode experimentar o nginx_tcp_proxy_module
proxy do conteúdo em blocos como dados TCP brutos: Módulo no Github
UPDATE (10.04.14)
O
nginx_http_proxy
módulo possui suporte para
X-Accel-*
cabeçalhos , dos quais um (
X-Accel-Buffering: yes|no
) controla se a resposta deve ser armazenada em buffer ou não.
Adicionar este cabeçalho ( X-Accel-Buffering: no
) à resposta do back-end fará com que o nginx passe diretamente os pedaços para o cliente.
Este cabeçalho permite controlar o buffer em uma base por solicitação .
O módulo também possui uma diretiva de configuração proxy_buffering
para habilitar ou desabilitar o buffer de resposta (sem buffer significa que o envio de chunks funcionará).
O buffer de proxy (baseado em cabeçalho e diretiva) está documentado aqui .