Malheureusement, je ne peux pas commenter le post du cnst - je vais donc répondre ici.
Le nginx_http_proxy
module parle par défaut avec l'amont en HTTP / 1.0. Cela peut être changé avec la directive proxy_http_version 1.1
.
Cela peut également être la raison pour laquelle votre script retourne une réponse HTTP / 1.0, bien que le codage en morceaux et le code d'état 307
n'existent pas dans cette version.
Vous ne devriez pas non plus utiliser de codage fragmenté avec une redirection , car cela n'a pas vraiment de sens.
De plus , il semble que nginx ne transmette pas les morceaux de l'amont au client un par un, mais il tamponne la réponse de l'amont . Le Content-Length
champ d'en-tête est ignoré car il est contraire à la définition. J'ai dû regarder le code source du module car tout cela ne semble pas documenté.
Vous voudrez peut-être essayer de mettre nginx_tcp_proxy_module
en proxy le contenu fragmenté en tant que données TCP brutes: Module sur Github
MISE À JOUR (10.04.14)
Le
nginx_http_proxy
module prend en charge les en-
X-Accel-*
têtes , dont un (
X-Accel-Buffering: yes|no
) contrôle si la réponse doit être mise en mémoire tampon ou non.
L'ajout de cet en-tête ( X-Accel-Buffering: no
) à la réponse du backend fera que nginx passera directement des morceaux au client.
Cet en-tête permet de contrôler la mise en mémoire tampon à la demande .
Le module dispose également d'une directive de configuration proxy_buffering
pour activer ou désactiver la mise en mémoire tampon des réponses (la mise en mémoire tampon ne signifie pas que l'envoi de blocs fonctionnera).
La mise en mémoire tampon du proxy (basée sur l'en-tête et la directive) est documentée ici .