启用 nginx 分块传输编码

启用 nginx 分块传输编码

看起来像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,并进行以下配置调用:

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

以及以下配置文件:

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;

(最初我发布了这个向 Stack Overflow 提问被建议它更适合 Server Fault)

答案1

我知道这是一个老问题,但它是在搜索问题时出现的(我花了一个下午试图解决它)。Martin F 的评论给了我足够的线索来让它工作!

诀窍是设置proxy_buffering off;您的位置块。假设您的上游服务器正在发回分块响应,这将导致 nginx 将各个块发回客户端 - 如果您已打开 gzip 输出压缩,甚至会动态地对它们进行 gzip 压缩。

请注意,关闭缓冲可能会有其他缺点,因此请不要在不了解原因的情况下盲目关闭缓冲。

答案2

我建议编辑一下你的问题以澄清问题。分块请求和分块响应之间有很大区别。John Dalton 的回答解决了后者的问题。Git 可以同时解决这两个问题。

Nginx 目前不支持分块 POST 请求,此帖子在该主题的搜索结果中排名靠前。分块 POST 请求适用于您事先不知道要上传的数据量的情况,手机经常使用此方法。

我发现的唯一可行的解​​决方案是:

http://wiki.nginx.org/HttpChunkinModule

不幸的是,它需要重新编译 nginx,因为 nginx 不支持可加载模块。

答案3

就我而言...我尝试了很多方法,最后只需要添加到配置中

proxy_http_version 1.1;

并且它有效...

答案4

其他答案曾经有效,但这是一个老问题。

这好像是nginx 1.3.9 支持分块传输[1],我认为它是在 2013 年中期发布的。

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

相关内容