a client request body is buffered to a temporary file /var/lib/nginx/body/0000000001
尽管文件成功上传,但我总是会遇到上述错误。 br />
我将
client_body_buffer_size
增加到1000m
,这是我希望上传的最大文件。但是,这只是一个猜测,尽管我不再遇到该错误,但我想知道这是否是为client_body_buffer_size
设置的适当值吗?如果有人可以甩掉一些东西,我将不胜感激阐明此指令及其用法。
#1 楼
这是警告,不是错误。这就是为什么在日志中以[warn]
开头的原因。这意味着上载的文件的大小大于为上载保留的内存缓冲区。
指令
client_body_buffer_size
控制该缓冲区的大小。如果您可以负担得起总是为偶尔的文件上传保留1GB的RAM,那就可以了。这是一种性能优化,可以将上载缓冲在RAM中,而不是在磁盘上的临时文件中,尽管如此大的上载可能要花上几秒钟。如果您上传的大部分文件都很小,那可能就是浪费。
最后,只有您才能真正决定合适的大小。
评论
您的回答帮助我做出了决定。我将值降低到大约512k到1m。可惜我会收到很多这样的警告。
– Abs
13年5月29日在20:53
由于存在虚拟内存,使用较大的值不会导致“总是为偶尔的文件上传保留1GB的RAM”。 (不会使用超出当前上传实际所需内存的RAM。)
– Kirill Bulygin
18年6月2日在7:38
如果我将其设置为50MB,并有200个人同时查看一个页面,那会占用10GB的内存,还是仅将50MB分配给执行文件上传的任何用户?
– Codemonkey
18-09-18在23:02
@Codemonkey此缓冲区仅在上载请求正文时使用。上载完成后,内存可以自由用于其他请求。而且,正如另一位评论者所指出的那样,当上传未进行时,不会使用任何内存。因此,这取决于您在给定的瞬间进行了多少同时上传。
–迈克尔·汉普顿
18-09-18在23:51
通常是十个,可能永远不会超过20个。128GB的盒子,所以我有足够的内存..!不过,老实说,我只是为了消除错误日志中的那些[警告]行-我可能应该忽略它们!
– Codemonkey
18/09/19的1:14
#2 楼
如果您不想NginX将正文内容存储在临时文件中,则可以设置配置。像这样: client_body_buffer_size 10M;
client_max_body_size 10M;
如果两个配置都设置为相同的最大值。大小(分别以kB,MB或GB为单位,以k,M或G为单位),可以防止NginX创建临时文件。文件。
有关更多信息:
http://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_buffer_size
和
http:// nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size
评论
但是使用该配置,您还将阻止所有大于10 MiB的上传
–约瑟夫说恢复莫妮卡
17年2月16日在14:55
@约瑟夫:绝对不能阻止。只是该请求将需要缓冲到磁盘上,并且您会收到警告。检查接受的答案。
–奥马尔·奥斯曼(OmarOthman)
17 Mar 7 '17 at 15:18
@ OmarOthman,Josef是对的,因为有client_max_body_size参数。请参阅此链接上的信息:client_max_body_size doc .:设置客户端请求正文的最大允许大小,在“ Content-Length”请求标头字段中指定。如果请求中的大小超过配置的值,则会向客户端返回413(请求实体太大)错误。请注意,浏览器无法正确显示此错误。将size设置为0将禁用对客户端请求主体大小的检查。
– eddy85br
17年7月7日在19:07
嘿,你知道为什么我的nginx在设置proxy_buffering时为什么要写入temporay文件吗?然后定位/ {proxy_pass ...; }?如何一起禁用对临时文件的写入?
– Sudip Bhattarai
20-2-25在16:28
@ eddy85br谢谢。我不得不做proxy_buffering;关闭响应缓冲和proxy_request_buffering;关闭请求缓冲。 proxy_cache关闭;与缓存响应有关,默认情况下处于关闭状态。 :nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache
– Sudip Bhattarai
20-2-27在17:57
评论
我有这个没有成功上传。