web-dev-qa-db-fra.com

Activation du codage de transfert Nginx.

On dirait Nginx 0.8.35 peut prendre en charge le codage de transfert chund :

Changements 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, parce que j'essaie d'obtenir des changements de git poussoir via un proxy inverse Nginx à un processus de backend http-http. GIT HTTP tire parti de l'encodage de transfert chunté 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 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 ressemble à ça:

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é ceci question à débordement de pile mais a été conseillé Il est plus approprié de défaut de serveur)

17
rentzsch

C'est une question ancienne, je sais, mais il est venu dans une recherche du problème (que j'ai passé l'après-midi à essayer de résoudre). Le commentaire de Martin F m'a donné assez d'indice pour le faire fonctionner!

L'astuce est de définir proxy_buffering off; Dans votre bloc de localisation. En supposant que votre serveur UPSTRAMP renvoie des réponses punkées, cela provoquera NGinx d'envoyer les morceaux individuels au client - même les gzipper à la volée si vous avez une compression de sortie Gzip.

Notez que la mise sous tension de la mémoire tampon peut avoir d'autres inconvénients, alors n'allez pas fermer aveuglément la tampon sans comprendre pourquoi.

25
John Dalton

Je suggère d'éditer votre question à clarifier. Il y a une grande différence entre les demandes punkées et les réponses punkées. La réponse de John Dalton traite de ce dernier. Git fait les deux.

Nginx ne supporte pas actuellement chunked POST Demandes et cette publication apparaît dans les résultats de la recherche sur le sujet. Chunked POST Les demandes sont utilisées lorsque vous ne connaissez pas le quantité de données téléchargées à l'avance et est fréquemment utilisée 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, il faut recompiler nginx comme Nginx ne prend pas en charge les modules chargables.

9
Roger Binns

Sur mon cas ... j'essaie beaucoup de choses et je n'ai enfin besoin d'ajouter à la configuration

proxy_http_version 1.1;

Et il fonctionne...

2
Cesar Gallego

D'autres réponses utilisées pour être valides, mais c'est une ancienne question.

On dirait que Les transferts chuntés sont pris en charge par Nginx 1.3.9 [1], qui a été publié au milieu de 2013, je pense.

[1] http://wiki.nginx.org/httpchunkinmodule

1
sandstrom