它看起来像nginx 0.8.35可能支持分块传输编码 :
nginx 0.8.35的更改2010年4月1日
*) Change: now the charset filter runs before the SSI filter. *) Feature: the "chunked_transfer_encoding" directive.
这真是太好了,因为我试图通过一个nginx反向代理将git变更推送到git-http-backend进程。 Git HTTP 为了客户端效率的原因,利用了分块传输编码。
但是,我不能得到它的工作。 我在Debian Lenny上使用nginx 0.8.44进行以下configuration调用:
./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
和下面的conf文件:
server { server_name example.com; location / { proxy_pass http://192.168.0.10; include /etc/nginx/proxy.conf; chunked_transfer_encoding on; } }
我的proxy.conf如下所示:
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;
(最初我把这个问题发布到堆栈溢出,但被告知它更适合服务器故障)
我知道这是一个古老的问题,但是它是为了寻找这个问题(下午我试图解决这个问题)。 马丁F的评论给了我足够的线索得到它的工作!
诀窍是proxy_buffering off; 在你的位置块。 假设您的上游服务器正在发送回分块响应,这将导致nginx将各个分块发送回客户端 – 即使gzip输出压缩处于打开状态,甚至可以立即对其进行gzip压缩。
请注意,closures缓冲区可能有其他缺点,所以不要盲目closures缓冲区而不理解原因。
我build议编辑你的问题来澄清。 分块的请求和分块的响应之间有很大的区别。 约翰·道尔顿的回答是针对后者。 Git做到了这两点。
Nginx目前不支持分块的POST请求,这个post在主题的search结果中显示高。 如果您不知道预先上传的数据量并经常使用手机,则会使用分块POST请求。
我发现唯一的工作解决scheme是这样的:
http://wiki.nginx.org/HttpChunkinModule
不幸的是,它需要重新编译nginx,因为nginx不支持可加载模块。
在我的情况下…我尝试了很多东西,最后只需要添加到configuration
proxy_http_version 1.1;
它的工作原理
其他答案曾经是有效的,但这是一个老问题。
看起来像分块转移支持每个nginx 1.3.9 [1],这是2013年年中发布我认为。