欢迎访问以下链接,查看原文:
blog.favorstack.io
最近检查服务器日志时,发现nginx的error中有好多警告:
2019/03/18 14:20:53 [warn] 846#846: *163 a client request body is buffered to a temporary file /var/cache/nginx/client_temp/0000000001, client: 172.16.169.1, server: _, request: "POST /action/upload?cid=5&_=4ede2405117ec82bcfd89b8b080b970a HTTP/1.1", host: "172.16.169.139", referrer: "http://172.16.169.139/admin/write-post.php?cid=5"
看来像是上传文件产生的,于是测试了一下,果然是这个原因,查了一下资料,原来是上传文件超过默认缓存大小就会触发,将数据写入临时文件,这样就会产生磁盘IO的开销。
为提高性能,我们需要调整一下nginx的参数配置,只需要增加以下两个参数,并根据实际情况调整值的大小即可:
location ~ [^/]\.php(/|$) {
client_body_buffer_size 500k;
# client_max_body_size 5m;
}
具体大小要看你实际上传文件的大小来定,比如写文章上传截图的文件大小一般在500k以下,那你就设置为500k。如果你没有大文件要上传,那么只配置client_body_buffer_size
这一个参数也可以,前提是文件大小在1m以内。第二个参数主要是防止413错误的,参见下面的参数解释。
另外,并不推荐将这两个值设置过大,因为这样的话会导致页面加载缓慢,浪费流量,用户体验不好,应该考虑将图片压缩处理。
参数解释:
client_body_buffer_size:
Syntax: client_body_buffer_size size;
Default: client_body_buffer_size 8k|16k;
Context: http, server, location
设置读取客户端请求体的缓冲区大小。如果请求体大于缓冲区,整个请求体或一部分就会被写入一个临时文件。默认缓冲区大小等于两个内存页,在x86,x86-64等32位平台上是8K,64位平台上通常为16K。
client_max_body_size:
Syntax: client_max_body_size size;
Default: client_max_body_size 1m;
Context: http, server, location
设置客户端请求体的最大允许大小(在“Content-Length”请求头中指定的大小),如果请求中的大小超过配置的值(即client_max_body_size),就会返回413(请求实体太大)错误码给客户端。需要注意的是,浏览器无法正确显示此错误。将大小设置为0将禁用检查客户端请求体大小。
参考:
https://serverfault.com/questions/511789/nginx-client-request-body-is-buffered-to-a-temporary-file
http://nginx.org/en/docs/http/ngx_http_core_module.html
欢迎访问以下链接,查看原文: