Nginx 限制请求体大小主要通过 client_max_body_size 指令实现,默认1MB,可设于http/server/location块,需配合 client_body_buffer_size、client_body_temp_path 和 client_body_timeout 使用,并校验语法后重载生效。

在 Nginx 中限制请求报文最大长度,核心是控制请求体(request body)大小,主要通过 client_max_body_size 指令实现。它直接决定上传文件或 POST 数据能否被接受,超限即返回 413 Request Entity Too Large 错误。
关键配置项:client_max_body_size
这是专用于限制 HTTP 请求体大小的指令,默认值为 1m(即 1MB),必须显式修改才能支持大文件上传。
- 语法简洁:
client_max_body_size 100M;(单位不区分大小写,支持m、M、g、G或字节数) - 可设置为
0表示不限制(仅限可信内网或调试环境) - 生效位置有三个层级,作用范围由宽到窄:
- http 块:全局生效,影响所有虚拟主机
- server 块:仅对该域名或监听地址生效,最常用也最推荐
-
location 块:只对匹配路径(如
/upload、/api/file)生效,适合精细化管控
配套必要参数
单设 client_max_body_size 不够,上传大文件还易因缓冲和超时失败:
-
client_body_buffer_size:设定内存缓冲区大小。若请求体超过此值但未超
client_max_body_size,Nginx 会写入临时文件。建议设为128k或更高,避免频繁磁盘 I/O -
client_body_temp_path:指定临时文件存放路径。需确保运行 Nginx 的用户对该目录有读写权限,否则报
Permission denied -
client_body_timeout:设置读取请求体的超时时间(如
300s),防止慢速上传中断后仍卡住连接
配置示例(推荐写在 server 块内)
以下是一个典型的大文件上传场景配置片段:
server {listen 80;
server_name example.com;
# 允许最大上传 500MB
client_max_body_size 500M;
# 内存缓冲区调大,减少落盘
client_body_buffer_size 256k;
# 设置临时文件路径(确保权限)
client_body_temp_path /var/tmp/nginx/client_body 1 2;
# 上传超时设为 5 分钟
client_body_timeout 300s;
location /upload {
# 此处可进一步细化,如单独限制该路径为 1G
client_max_body_size 1G;
}
}
生效与验证
修改后必须让配置真正起效:
- 先校验语法:
sudo nginx -t - 再平滑重载:
sudo nginx -s reload(推荐,不中断服务) - 若仍报 413,请检查是否多个 location 或 server 块中存在更小的
client_max_body_size覆盖了你的设置 - 注意后端应用(如 PHP、Node.js)也有自身上传限制,需同步调整,否则 Nginx 放行后仍可能失败


















