Il semble que nginx 0.8.35 puisse prendre en charge le codage de transfert par blocs :
Modifications avec nginx 0.8.35 01 avr 2010
*) Change: now the charset filter runs before the SSI filter. *) Feature: the "chunked_transfer_encoding" directive.
C'est génial, car j'essaye d'obtenir des modifications push git via un proxy inverse nginx vers un processus git-http-backend. Git HTTP tire parti du codage de transfert par blocs pour des raisons d'efficacité côté client .
Cependant, je ne peux pas le faire fonctionner. J'utilise nginx 0.8.44 sur Debian Lenny avec l'invocation de configuration suivante:
./configure \
--sbin-path=/usr/sbin \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--user=www-data \
--group=www-data \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-http_realip_module
Et le fichier de conf suivant:
server {
server_name example.com;
location / {
proxy_pass http://192.168.0.10;
include /etc/nginx/proxy.conf;
chunked_transfer_encoding on;
}
}
Et mon proxy.conf
look ressemble à ceci:
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 100M;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
(À l'origine, j'ai posté cette question sur Stack Overflow mais on m'a dit qu'elle était plus appropriée à la défaillance du serveur)
Réponses:
C'est une vieille question, je sais, mais elle est venue à la recherche du problème (que j'ai passé l'après-midi à essayer de résoudre). Le commentaire de Martin F m'a donné suffisamment d'indices pour le faire fonctionner!
L'astuce consiste à définir
proxy_buffering off;
dans votre bloc de localisation. En supposant que votre serveur en amont renvoie des réponses fragmentées, nginx enverra les morceaux individuels au client - même en les compressant à la volée si la compression de sortie gzip est activée.Notez que la désactivation de la mise en mémoire tampon peut avoir d'autres inconvénients, alors n'allez pas aveuglément désactiver la mise en mémoire tampon sans comprendre pourquoi.
la source
Je suggère de modifier votre question pour clarifier. Il y a une grande différence entre les requêtes fragmentées et les réponses fragmentées. La réponse de John Dalton s'adresse à ce dernier. Git fait les deux.
Nginx ne prend actuellement pas en charge les requêtes POST fragmentées et cette publication apparaît en haut dans les résultats de recherche sur le sujet. Les requêtes POST fragmentées sont utilisées lorsque vous ne connaissez pas la quantité de données téléchargées à l'avance et sont fréquemment utilisées par les téléphones mobiles.
La seule solution de travail que j'ai trouvée est la suivante:
http://wiki.nginx.org/HttpChunkinModule
Malheureusement, cela nécessite de recompiler nginx car nginx ne prend pas en charge les modules chargeables.
la source
Sur mon cas ... j'essaye beaucoup de choses et finalement je n'ai qu'à ajouter à la configuration
Et il fonctionne...
la source
proxy_set_header Connection "";
... réponse originale de -> forum.nginx.org/read.php?2,247883,247883#msg-247883D'autres réponses étaient valides, mais c'est une vieille question.
Il semble que les transferts par blocs soient pris en charge par nginx 1.3.9 [1], qui a été publié mi-2013 je pense.
[1] http://wiki.nginx.org/HttpChunkinModule
la source