Nginx 系列 | (转)Nginx 上传文件:client_max_body_size 、client_body_buffer_size

nginx,系列,上传,文件,client,max,body,size,buffer · 浏览次数 : 390

小编点评

**问题描述:** 当请求的正文数据大于 `client_max_body_size` 时,HTTP协议会报错 `413 Request Entity Too Large`,因为服务器无法处理数据超过 `client_max_body_size` 的请求。 **解决方案:** 1. **设置 `client_body_buffer_size` 属性:** 可以通过配置 `client_body_buffer_size` 来指定请求数据允许存储的最大字节数。默认值为 1M,意味着服务器最多可以处理 1MB 的正文数据。建议设置为大于请求数据的实际大小,例如 8MB 或 16MB。 2. **设置 `client_max_body_size` 属性:** 可以通过配置 `client_max_body_size` 来指定服务器允许处理的最大正文数据字节数。默认值为 1M,意味着服务器最多可以处理 1MB 的正文数据。 **示例配置:** ```php // 配置 client_body_buffer_size ini_set('client_body_buffer_size', 8 * 1024 * 1024); // 配置 client_max_body_size ini_set('client_max_body_size', 20 * 1024 * 1024); ``` **注意:** * `client_body_temp` 默认值是 `/tmp/`,该路径需要有执行 Nginx的用户组有读写权限。 * 如果 `client_body_temp` 指定的路径存在问题,可以尝试修改 `client_body_temp` 属性。 * 使用 Lua 开发时,需要手动读取请求数据并将其放置到请求数据中。

正文

原文:http://php-note.com/article/detail/488

client_max_body_size

client_max_body_size 默认 1M,表示 客户端请求服务器最大允许大小,在“Content-Length”请求头中指定。如果请求的正文数据大于client_max_body_size,HTTP协议会报错 413 Request Entity Too Large。就是说如果请求的正文大于client_max_body_size,一定是失败的。如果需要上传大文件,一定要修改该值。

client_body_buffer_size

Nginx分配给请求数据的Buffer大小,如果请求的数据小于client_body_buffer_size直接将数据先在内存中存储。如果请求的值大于client_body_buffer_size小于client_max_body_size,就会将数据先存储到临时文件中,在哪个临时文件中呢?

client_body_temp 指定的路径中,默认该路径值是/tmp/。

所以配置的client_body_temp地址,一定让执行的Nginx的用户组有读写权限。否则,当传输的数据大于client_body_buffer_size,写进临时文件失败会报错。

这个问题我们遇到过。

20648 open() "/usr/local/openresty-1.9.7.5/nginx/client_body_temp/0000000019" failed (13: Permission denied)

/usr/local/openresty-1.9.7.5/nginx/client_body_temp/这个文件夹权限改为执行Nginx的用户群组就可以解决。

在这个问题上和语言就相关了,如果使用的是PHP,PHP会自己将临时文件读取出来,放置到请求数据里面,这是没有问题的,开发者也不需要关心。肯定是完整的数据。

如果使用的openresty lua 开发的话,就需要开发者自己读取出来,让后续的逻辑使用。

function getFile(file_name)
    local f = assert(io.open(file_name, 'r'))
    local string = f:read("*all")
    f:close()
    return string
end

ngx.req.read_body()
local data = ngx.req.get_body_data()
if nil == data then
local file_name = ngx.req.get_body_file()
ngx.say(">> temp file: ", file_name)
if file_name then
data = getFile(file_name)
end
end

ngx.say("hello ", data)

总结

  • 传输的数据大于 client_max_body_size,一定是传不成功的。
  • 小于 client_body_buffer_size直接在内存中高效存储。
  • 如果大于 client_body_buffer_size 小于 client_max_body_size 会存储临时文件,临时文件一定要有权限。
  • 如果追求效率,就设置 client_max_body_size 和 client_body_buffer_size 相同的值,这样就不会存储临时文件,直接存储在内存了。
</article>

与Nginx 系列 | (转)Nginx 上传文件:client_max_body_size 、client_body_buffer_size相似的内容:

Nginx 系列 | (转)Nginx 上传文件:client_max_body_size 、client_body_buffer_size

原文:http://php-note.com/article/detail/488 client_max_body_size client_max_body_size 默认 1M,表示 客户端请求服务器最大允许大小,在“Content-Length”请求头中指定。如果请求的正文数据大于client_

[转帖]Nginx系列之nginx四层反向代理

https://cloud.tencent.com/developer/article/2013908 上集说到nginx的http七层代理,其实它工作在OSI七层模型的应用层。由于其可以解析http协议,我们可以根据URI进行请求的分发,具有很大的灵活性,但是协议的解析存在性能的消耗。为了能获取更

Java扩展Nginx之五:五大handler(系列最核心)

本篇概览本文是《Java扩展Nginx》系列的最核心篇章,咱们写的代码主要集中在这些handler中

高可用系列文章之三 - NGINX 高可用实施方案

前文链接 高可用系列文章之一 - 概述 - 东风微鸣技术博客 (ewhisper.cn) 高可用系列文章之二 - 传统分层架构技术方案 - 东风微鸣技术博客 (ewhisper.cn) 四 NGINX 高可用实施方案 高可用的实施, 主要步骤概述如下: NGINX 的安装及基础配置 负载均衡层高可用

高可用系列文章之四 - 总结

前文链接 高可用系列文章之一 - 概述 - 东风微鸣技术博客 (ewhisper.cn) 高可用系列文章之二 - 传统分层架构技术方案 - 东风微鸣技术博客 (ewhisper.cn) 高可用系列文章之三 - NGINX 高可用实施方案 - 东风微鸣技术博客 (ewhisper.cn) 六 总结 高

[转帖]探索惊群 ①

https://wenfh2020.com/2021/09/25/thundering-herd/ 惊群比较抽象,类似于抢红包 😁。它多出现在高性能的多进程/多线程服务中,例如:nginx。 探索惊群 系列文章将深入 Linux (5.0.1) 内核,透过 多进程模型 去剖析惊群现象、惊群原理、惊

[转帖]Nginx惊群效应引起的系统高负载

https://zhuanlan.zhihu.com/p/401910162 原创:蒋院波 导语:本文从进程状态,进程启动方式,网络io多路复用纬度等方面知识,分享解决系统高负载低利用率的案例 前言: 趣头条SRE团队,从服务生命周期管理、混沌工程、业务核心链路治理、应急预案、服务治理(部署标准化、

[转帖]Nginx性能调优

https://www.jianshu.com/p/024b33d1a1a1/ 本文翻译自Tuning NGINX for Performance Nginx以高性能负载均衡、缓存和web服务器出名,支撑着世界上繁忙网站中的40%。大多数使用场景下,Nginx和Linux系统的默认配置表现较好,但是

CentOS7系统搭建web环境 php&nginx&pgsql

环境:VMware、CentOS-7-x86_64-DVD-2009.iso、nginx-1.26.1、php-7.2.0、postgresql-12 php最好安装对应php项目所需版本,否则会出现不兼容问题。 一、VMware安装CentOS7操作系统 下载 Linux Centos 7 映像:

[转帖]Nginx 服务并发过10万的Linux内核优化配置

https://www.shuzhiduo.com/A/6pdDejeXzw/ 以下Linux 系统内核优化配置均经在线业务系统测试,服务器运行状态良好,用了一些时间整理,现和大家分享一下,如有那位高人看到配置上有问题,请给与指出! # Controls the use of TCP syncook