Infelizmente, não posso comentar o post do cnst - por isso vou responder aqui.
O módulo nginx_http_proxy
por padrão fala 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ê não deve usar codificação em partes com um redirecionamento , pois isso não faz sentido.
Além disso , parece que o nginx não passa pedaços do upstream ao cliente um por um, mas buffers a resposta do upstream .
O campo de cabeçalho Content-Length
é ignorado porque é contra a definição.
Eu tive que olhar para o código fonte do módulo porque tudo isso parece estar indocumentado.
Você pode experimentar o nginx_tcp_proxy_module
para representar o conteúdo em partes como dados brutos do TCP: Módulo no Github
UPDATE (10.04.14)
O módulo
nginx_http_proxy
tem 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 backend fará com que o nginx passe diretamente pedaços para o cliente.
Esse cabeçalho permite controlar o buffer em uma base por solicitação .
O módulo também tem uma diretiva de configuração proxy_buffering
para habilitar ou desabilitar o buffer de resposta (não armazenar em buffer significa que o envio de partes funcionará).
O armazenamento em buffer proxy (com base no cabeçalho e na diretiva) está documentado aqui .