Pregunta Habilitar la codificación de transferencia fragmentada nginx


Parece que nginx 0.8.35 puede soportar codificación de transferencia fragmentada:

Cambios con nginx 0.8.35 01 abr 2010

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

*) Feature: the "chunked_transfer_encoding" directive.

Esto es genial, porque estoy tratando de obtener cambios de git push a través de un proxy inverso nginx a un proceso git-http-backend. Git HTTP aprovecha la codificación de transferencia fragmentada por razones de eficiencia del lado del cliente.

Sin embargo, no puedo hacerlo funcionar. Estoy usando nginx 0.8.44 en Debian Lenny con la siguiente invocación de configuración:

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

Y el siguiente archivo conf:

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

Y mi proxy.conf Se ve como esto:

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 publiqué esto pregunta para desbordamiento de pila pero fue aconsejado es más apropiado para el fallo del servidor)


16
2017-07-11 06:08


origen


No puedes tener buffers, así como codificaciones fragmentadas. Los buffers esperan para enviar datos, fragmentados deben enviarlos inmediatamente. - Martin Fjordvald
Al parecer, Nginx es compatible con Chunked desde la versión 1.3.9 (27/11/2012). Sin embargo, todavía recibo mensajes de error "411 de longitud requerida" cuando un teléfono inteligente envía solicitudes POST fragmentadas a mi servidor Nginx. ¿Algún consejo? - Meir


Respuestas:


Esta es una vieja pregunta, lo sé, pero surgió en una búsqueda del problema (que he pasado la tarde tratando de resolver). ¡El comentario de Martin F me dio una pista suficiente para que funcionara!

El truco es establecer proxy_buffering off; en su bloque de ubicación. Suponiendo que su servidor ascendente está enviando respuestas fragmentadas, esto causará que nginx envíe los fragmentos individuales de vuelta al cliente, incluso si los comprime sobre la marcha si tiene activada la compresión de salida de gzip.

Tenga en cuenta que desactivar el almacenamiento en búfer puede tener otras desventajas, por lo tanto, no apague a ciegas el almacenamiento en búfer sin entender por qué.


22
2017-10-05 02:15





Sugiero que edite su pregunta para aclarar. Hay una gran diferencia entre las solicitudes fragmentadas y las respuestas fragmentadas. La respuesta de John Dalton se dirige a este último. Git hace ambas cosas.

Nginx actualmente no admite solicitudes POST fragmentadas y esta publicación se muestra alta en los resultados de búsqueda sobre el tema. Las solicitudes POST fragmentadas se utilizan cuando no conoce la cantidad de datos que se cargan por adelantado y los teléfonos móviles los utilizan con frecuencia.

La única solución de trabajo que encontré es esta:

http://wiki.nginx.org/HttpChunkinModule

Desafortunadamente, requiere la recompilación de nginx ya que nginx no admite módulos cargables.


9
2018-01-30 08:17



Estoy de acuerdo: estoy descubriendo que HttpChunkinModule es la única solución teórica ... pero no está abierta para mí en mi situación. ¿Alguien sabe si se puede hacer algo más? (¿Algún cambio desde el 30 de enero de 2011?) - mdahlman
No hay cambios que yo sepa. Acabo de hacer una compilación de nginx el otro día para habilitar esto. - Roger Binns


En mi caso ... trato muchas cosas y finalmente solo necesito agregar a la configuración

proxy_http_version 1.1;

Y funciona...


1
2017-10-28 09:06



Tuve que añadir proxy_set_header Connection "";... respuesta original de -> forum.nginx.org/read.php?2,247883,247883#msg-247883 - Christian Ulbrich


Otras respuestas solían ser válidas, pero esta es una vieja pregunta.

Parece que Las transferencias fragmentadas son compatibles por nginx 1.3.9[1], que fue lanzado a mediados de 2013, creo.

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


0
2018-01-15 12:29