上传一个几十MB的文件立即返回413,小文件却正常,说明请求在进入业务处理前后被某一层判定为过大。现代网站往往经过CDN、WAF、负载均衡、Nginx和应用框架,真正限制请求体的不一定是最靠近应用的那台服务器。
413表示什么
HTTP 413表示请求内容超过服务器当前愿意或能够处理的范围。旧文档和错误页可能写“Request Entity Too Large”,新名称常见“Content Too Large”。它描述的是请求体,不是URL长度、请求头大小或响应文件大小。
可能返回413的层
| 组件 | 常见限制对象 | 证据 |
|---|---|---|
| CDN/WAF | 产品套餐、规则或安全扫描上限 | 边缘请求ID、错误页、WAF日志 |
| 反向代理 | 请求体大小与临时文件 | 代理错误日志和配置 |
| 应用服务器 | 表单、多部分上传、JSON大小 | 框架异常与应用日志 |
| 业务代码 | 用户、文件类型或接口级限制 | 结构化业务错误 |
先确认错误由谁生成
记录响应头、错误页特征、请求ID和准确时间,在CDN、WAF、代理及应用日志中逐层查找。如果应用完全没有收到请求,优先检查更外层;若应用日志明确报multipart上限,就不要只改Nginx。多层上限应有一致的设计和清晰错误提示。
Content-Length并非全部事实
客户端可能发送Content-Length,也可能使用分块传输。multipart/form-data还包含边界和字段开销,多文件接口看的是总请求体而非单个文件。安全设备也可能解码或解压后检查,因此用户看到的文件大小与中间层计算值不总是相同。
Nginx限制改在哪里
Nginx可在不同配置作用域设置请求体上限,具体生效值取决于请求匹配的server和location。修改后要校验配置并安全重载,再用同一路径测试。不要只在默认站点增加配置,却让实际域名命中另一个虚拟主机。
上限变大后还有超时
允许更大请求体会延长上传时间。客户端发送超时、代理读取请求体超时、负载均衡空闲超时和应用处理超时都可能接着暴露。应根据最慢合理网络估算,并监控上传速率;无限延长超时会让慢速连接长期占用资源。
缓冲到内存还是磁盘
代理可能先把请求体缓冲到内存或临时文件,再交给上游。并发大文件会消耗磁盘空间、IO和文件描述符。检查临时目录权限与容量,设置用户配额和并发限制,避免一次配置调整把413变成磁盘占满。
为什么推荐分片上传
对象存储分片上传把大文件拆成多个可重试部分,失败时无需从头发送。应用可签发短期、限定对象与大小的上传凭证,完成后再校验哈希和业务权限。预签名地址不能长期有效,也不能允许用户任意覆盖其他对象。
文件类型不能只看扩展名
上限通过后还要检查真实内容类型、文件头、恶意内容、压缩炸弹与存储路径。上传目录不应直接执行脚本,下载响应要设置安全Content-Type和权限。合规业务也应限制保存期限和访问范围。
大文件下载与上传要分开
Range和断点续传主要解决下载恢复,不能直接替代上传分片。下载侧的206、ETag与校验可参考大文件代理下载与断点续传,上传仍需按所用协议设计分片、合并和完整性检查。
排查顺序
- 记录文件大小、请求路径、用户、时间和响应头;
- 确认CDN、WAF、代理还是应用生成413;
- 核对每层限制、multipart开销和临时存储;
- 按真实业务设置最小够用的大小与超时;
- 验证未授权用户、错误类型和超大文件仍被拒绝;
- 为大文件评估分片、限速、哈希和失败清理。
结论
413不是简单把一个配置改成无限大。找到真正拒绝请求的层,统一大小、超时和缓冲策略,再根据文件规模选择分片或对象存储,才能兼顾上传成功率与服务器安全。






