Ativando o nginx Codificação de transferência em partes

16

Parece que o nginx 0.8.35 pode oferecer suporte à codificação de transferência em partes :

Changes with nginx 0.8.35 01 Apr 2010

*) Change: now the charset filter runs before the SSI filter.

*) Feature: the "chunked_transfer_encoding" directive.

Isso é ótimo, porque estou tentando fazer alterações no push git por meio de um proxy reverso nginx para um processo git-http-backend. O Git HTTP aproveita a codificação de transferência em partes por motivos de eficiência do lado do cliente .

No entanto, não consigo fazê-lo funcionar. Estou usando o nginx 0.8.44 no Debian Lenny com a seguinte invocação de configuração:

./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

E o seguinte arquivo conf:

server {
    server_name example.com;
    location / {
        proxy_pass  http://192.168.0.10;
        include     /etc/nginx/proxy.conf;
        chunked_transfer_encoding on;
    }
}

E meu proxy.conf é assim:

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;

(Originalmente, postei esta pergunta para o Stack Overflow , mas foi aconselhado é mais apropriado para o Server Fault)

    
por rentzsch 11.07.2010 / 08:08

4 respostas

23

Essa é uma pergunta antiga, eu sei, mas surgiu em uma busca pelo problema (que passei a tarde tentando resolver). O comentário de Martin F me deu uma pista suficiente para fazê-lo funcionar!

O truque é definir proxy_buffering off; no seu bloco de localização. Supondo que seu servidor upstream esteja enviando respostas em partes, isso fará com que o nginx envie as partes individuais de volta para o cliente - mesmo fazendo o gzip delas em tempo real se você tiver a compressão de saída gzip ativada.

Note que desligar o buffer pode ter outras desvantagens, então não desligue cegamente o buffer sem entender o porquê.

    
por 05.10.2010 / 04:15
9

Sugiro editar sua pergunta para esclarecer. Há uma grande diferença entre solicitações em partes e respostas em partes. A resposta de John Dalton aborda o último. Git faz os dois.

No momento, o Nginx não suporta solicitações POST em partes e essa postagem aparece alta nos resultados de pesquisa sobre o tópico. Solicitações POST em partes são usadas quando você não sabe a quantidade de dados enviados com antecedência e é usado com frequência por telefones celulares.

A única solução de trabalho que encontrei é esta:

link

Infelizmente, é necessário recompilar o nginx, já que o nginx não suporta módulos carregáveis.

    
por 30.01.2011 / 09:17
1

No meu caso ... eu tento muitas coisas e, finalmente, só preciso adicionar à configuração

proxy_http_version 1.1;

E funciona ...

    
por 28.10.2016 / 11:06
0

Outras respostas costumavam ser válidas, mas essa é uma pergunta antiga.

Parece que Transferências em partes são suportadas por nginx 1.3.9 [1], que foi lançado em meados de 2013, eu acho.

[1] link

    
por 15.01.2014 / 13:29