Nginx 默认 client_max_body_size 为1MB,超限返回413错误;需在http/server/location中显式设置并重载配置,同时同步调整后端服务限制。

Nginx 安装后默认的 client_max_body_size 是 1MB,即 1048576 字节。这意味着如果客户端(如浏览器、API 调用)上传的请求体(例如 POST 或 PUT 的 body、文件上传)超过 1MB,Nginx 会直接返回 413 Request Entity Too Large 错误,根本不会将请求转发给后端应用(如 PHP-FPM、Node.js、Python 等)。
如何查看当前生效的 client_max_body_size
该指令可在多个作用域中配置:http、server、location。实际生效值取**最内层匹配的作用域设置**。可通过以下方式确认:
- 检查主配置文件(通常 /etc/nginx/nginx.conf)中的
http块 - 检查站点配置(如 /etc/nginx/sites-enabled/example.com)中的
server或location块 - 运行
nginx -T | grep client_max_body_size查看所有已加载的配置中该指令的定义位置和值
如何修改以支持更大请求体
在对应作用域中显式设置所需大小即可,单位支持 k(KB)、m(MB)、g(GB):
- 全局生效(影响所有 server):
http { client_max_body_size 20m; } - 仅对某个站点生效:
server { client_max_body_size 50m; } - 仅对特定接口路径生效(如文件上传接口):
location /api/upload { client_max_body_size 100m; }
修改后务必执行 nginx -t 检查语法,再 systemctl reload nginx(或 nginx -s reload)使配置生效。
注意后端服务自身的限制也要同步调整
Nginx 只是第一道关卡。即使它放行了大请求,后端仍可能因自身限制拒绝处理:
- PHP:需同步调整
upload_max_filesize和post_max_size(php.ini) - Node.js(Express):需配置
express.json({ limit: '50mb' })和express.urlencoded({ limit: '50mb', extended: true }) - Python(Django/Flask):检查
DATA_UPLOAD_MAX_MEMORY_SIZE、FILE_UPLOAD_MAX_MEMORY_SIZE或中间件限制
调试 413 错误的常见排查点
- 确认错误确实来自 Nginx(响应头含
Server: nginx,且无后端服务日志记录该请求) - 检查是否在多个配置层级重复设置,导致意外覆盖(如 http 块设为 10m,但某个 location 块又设为 1m)
- 注意:该指令对 GET 请求无效(GET 无 body),只影响有请求体的方法(POST、PUT、PATCH 等)
- 若使用代理(proxy_pass),还需确认后端服务器本身没有额外的 body 大小限制










