直接修改 client_max_body_size 是解决“413 Request Entity Too Large”错误的核心操作,需在 location、server 或 http 块中正确配置,注意单位格式(如 100M)、语法校验、后端同步调优及临时目录权限。

直接改 client_max_body_size 就行,这是解决“413 Request Entity Too Large”错误的核心操作。默认值仅 1MB,上传稍大的文件就会被 Nginx 拦在门外,根本不会转发给后端。
在哪设置才真正生效
这个指令可在三个位置配置,作用范围不同,优先级也不同:
-
location 块内:最精准,只对特定路径(比如
/upload或/api/file)起效;若用了proxy_pass,必须放在这里,否则无效 - server 块内:推荐首选,控制整个域名或虚拟主机的上传限制,不干扰其他站点
- http 块内:全局生效,所有 server 和 location 都继承,适合统一策略,但灵活性差
注意:它不自动继承——比如你在 http 里设了 100M,但某个 location 没写该指令,且该 location 又没匹配到更具体的规则,就会回退到默认 1MB。
怎么写才不出错
语法简单,但单位和格式容易踩坑:
- 写成
client_max_body_size 100M;或client_max_body_size 2G;,单位支持 k / M / G(大小写均可) - 别写
100MB或100m——小写m会被识别为毫秒,导致配置加载失败 - 数值不能带空格,也不能用科学计数法;写成
0表示不限制(仅限可信内网或调试环境)
改完不生效?这些地方常被忽略
配置重载只是第一步,下面几项漏掉一个,上传照样失败:
- 运行
sudo nginx -t检查语法,再执行sudo systemctl reload nginx(不是 restart) - 确认修改的是实际生效的配置文件,常见路径是
/etc/nginx/nginx.conf或/etc/nginx/conf.d/*.conf - 后端服务也有上传限制,必须同步放开:Spring Boot 调
spring.servlet.multipart.max-request-size,PHP 改upload_max_filesize和post_max_size,Node.js 框架也要调 body 解析限制 - 临时目录权限要检查——当上传体超过
client_body_buffer_size(默认 8KB–16KB)时,Nginx 会写临时文件到client_body_temp_path(默认/tmp),确保 Nginx 运行用户(如www-data)有读写权限
快速验证是否生效
加个测试路由,不用上传也能初步确认:
- 在 server 块里临时加上:
location /test-upload {
client_max_body_size 500M;
return 200 "Max body size set to 500M";
}
访问 http://your-domain/test-upload 返回成功响应,说明语法和加载都没问题。再配合真实上传测试即可闭环验证。


















