Sfortunatamente, non posso commentare il post di cnst, quindi risponderò qui.
Il nginx_http_proxy
modulo di default parla con l'upstream in HTTP / 1.0. Questo può essere modificato con la direttiva proxy_http_version 1.1
.
Questo potrebbe anche essere il motivo per cui lo script restituisce una risposta HTTP / 1.0, sebbene 307
in questa versione non esistano codifica a blocchi e codice di stato .
Non dovresti nemmeno usare la codifica a blocchi con un reindirizzamento , poiché questo non ha davvero senso.
Inoltre , sembra che nginx non passi i blocchi dall'upstream al client uno per uno, ma bufferizza la risposta dell'upstream . Il Content-Length
campo di intestazione viene ignorato perché è contrario alla definizione. Ho dovuto guardare il codice sorgente del modulo perché tutto ciò sembra essere privo di documenti.
Puoi provare a eseguire il nginx_tcp_proxy_module
proxy del contenuto in blocchi come dati TCP non elaborati: Modulo su Github
AGGIORNAMENTO (10.04.14)
Il
nginx_http_proxy
modulo ha il supporto per le
X-Accel-*
intestazioni , di cui una (
X-Accel-Buffering: yes|no
) controlla se la risposta deve essere bufferizzata o meno.
L'aggiunta di questa intestazione ( X-Accel-Buffering: no
) alla risposta del backend farà sì che nginx passi direttamente i blocchi al client.
Questa intestazione consente di controllare il buffering in base alla richiesta .
Il modulo ha anche una direttiva di configurazione proxy_buffering
per abilitare o disabilitare il buffering di risposta (non buffering significa che l'invio di blocchi funzionerà).
Il buffering proxy (sia basato su intestazione sia su direttiva) è documentato qui .