client_max_body_size和client_body_buffer_size

最近发现给家里的nas上传大文件总是失败。于是看了nginx的日志发现:

2018/09/27 03:35:52 [error] 8#8: *14739 client intended to send too large body: 9247821 bytes, client: 115.214.xxx.xxx, server: 192.168.188.64, request: "POST /cgi-bin/filemanager/utilRequest.cgi?func=upload&type=standard&sid=ke3nzp1z&dest_path=%2Fhome%2FCamera%20Uploads%2FCamera&overwrite=0&progress=-home-Camera%20Uploads-Camera-IMG_20180922_143956.jpg HTTP/1.1", host: "www.xxxxx.com:81"

看到“too large body”就知道是http的请求体太小。然后就在nginx里增加配置,把请求体的最大大小设置为100M:

client_max_body_size 100m;

重启nginx后,在error.log里又看到下面的警告:

2018/09/27 05:33:37 [warn] 8#8: *364 a client request body is buffered to a temporary file /var/cache/nginx/client_temp/0000000049, client: 115.214.xxx.xxx, server: 192.168.188.64, request: "POST /cgi-bin/filemanager/utilRequest.cgi?func=chunked_upload&sid=d8cqr8yi&upload_id=tmpqEaIWu&settime=1&mtime=1533434732&offset=0&dest_path=%2Fhome%2FCamera%20Uploads%2FCamera&overwrite=0&filesize=6596195&upload_root_dir=%2Fhome HTTP/1.1", host: "www.xxxxxx.com:81"

这个错误的意思是每个请求的请求体缓存太小了,缓存(内存)放不下上传的文件,就写到文件系统里。不调整这个缓存大小也不会影响功能。但是每次上传一张较大的照片,nginx就要写一次文件系统。在批量上传照片的场景,nginx的io太多了。

我把这个缓存设置为20M,对于手机拍的照片,20M足够。大于20M的问题就,就够就写到文件系统里呗。

nginx配置:

client_body_buffer_size 20m;

 

 

此条目发表在IT分类目录,贴了, , 标签。将固定链接加入收藏夹。

1 则回应给 client_max_body_size和client_body_buffer_size

  1. Pingback引用通告: 记一次线上接口404排查过程 – w候人兮猗

发表评论

电子邮件地址不会被公开。

*