Nginx:a client request body is buffered to a temporary file

本文介绍了如何解决Nginx因上传文件过大导致的警告问题,建议通过调整`client_body_buffer_size`和`client_max_body_size`参数以减少磁盘IO开销并防止413错误。合理设置这两个参数可以优化性能,防止页面加载缓慢和流量浪费,同时确保良好的用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


欢迎访问以下链接,查看原文:

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


欢迎访问以下链接,查看原文:

blog.favorstack.io


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值