Nginx:如何完全禁用请求正文缓冲


17

我正在尝试在Ubuntu盒子上设置Madsonic,并在其前面运行Nginx。问题是,当我尝试通过Web界面上传内容时,我始终收到此警告:

31115#0: *14 a client request body is buffered to a temporary file

这也解释了为什么上传窗口上的进度条不起作用。这是我相关的Nginx配置:

    # proxy the madsonic server here
    location / {
            proxy_pass                      https://madsonic-server/;
            proxy_redirect                  off;
            proxy_buffering                 off;
            proxy_request_buffering         off;
            allow                           all;
            proxy_http_version              1.1;

            proxy_set_header                Host $http_host;
            proxy_set_header                X-Real-IP $remote_addr;
            proxy_set_header                X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header                X-Forwarded-Host $server_name;
            proxy_set_header                X-Forwarded-Proto $scheme;

            client_body_buffer_size         0;
            client_max_body_size            0;
            proxy_max_temp_file_size        0;
            proxy_read_timeout              18000;
            proxy_send_timeout              18000;

            gzip                            off;
    }

我目前正在使用Nginx 1.9.12。

我想要实现的是使Nginx根本不使用请求正文缓冲区,而直接将请求正文直接传递给Madsonic,而不管大小如何。这有可能吗?如果是的话,正确的配置是什么?

其他问题似乎通过设置缓冲区大小的方法得到了解答。我不要任何缓冲区。我想直接将请求正文传递给Madsonic。


您无法将其关闭。您只能设置缓冲区大小。
迈克尔·汉普顿

@MichaelHampton但是这个解释呢?
rad

啊,你是对的。看来,您已经回答了自己的问题。
迈克尔汉普顿

@MichaelHampton好吧,是的,除了由于某些原因它仍然没有关闭:(
rad

有运气吗?根据docs设置proxy_request_buffering的文档,我遇到了同样的问题,但是仍然可以缓存上传内容。
alejandrodnm

Answers:


17

在为Docker注册表设置Nginx代理时,我遇到了同样的问题。我最终做了:

client_max_body_size 0;
proxy_http_version 1.1;
proxy_request_buffering off;

client_max_body_size仍必须为0才能防止错误,但watch -n 1 du -hs .明显显示出差异。缓冲使数据出现在请求之后,没有缓冲使数据出现在请求期间。

proxy_http_version 1.1由于分块编码,因此很有必要。引用Nginx文档:

当使用HTTP / 1.1分块传输编码发送原始请求正文时,无论指令值如何,都将对请求正文进行缓冲,除非为代理启用了HTTP / 1.1。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.