服务公告
上传图片报 413:请求体大小限制的四处修改点
发布时间:2026-10-15 10:17
## 症状现象 后台传图,小图正常,稍微大点的图直接报 413 Request Entity Too Large。413 的语义明确:请求体超过了某一层允许的上限,被拦下的位置在应用拿到数据之前。这个限制可能藏在四个地方,逐处排查,谁拦的改谁。413 的另一个特征是发生位置一致:总在传输开始或结束的固定阶段,与网络波动无关。 ## 第一处:Nginx 反代或直接服务场景里,Nginx 的 client_max_body_size 是最常见的拦截点,默认值很小。命中特征:Nginx 错误日志里 client intended to send too large body 字样。修改: ```nginx client_max_body_size 20m; ``` 按层级写在 http、server 或 location,越靠下优先级越高,只给上传接口放开是更精细的做法。改完 reload。 ## 第二处:PHP PHP 环境两个参数联动:upload_max_filesize 管单文件,post_max_size 管整个请求体,后者必须不小于前者,还要覆盖表单里其他字段的体积。phpinfo 确认运行值改没改对,改完重启 PHP-FPM。注意 CLI 与 FPM 是两份配置,改错文件等于没改。 ## 第三处:应用框架 框架层自己也有校验:表单验证的文件大小规则、中间件的请求体限制、上传组件的配置项。特征:前两层都放开了仍然被拦,错误信息换成框架自己的提示,格式不再是 413。改框架配置或校验规则即可,这类限制通常按业务设计设置,调整前确认是否有意为之,框架升级后默认值收紧也属这类。 **第四处:前端与中间层。**前端库的文件大小预检会直接拦掉请求;链路上还有 WAF、负载均衡、对象存储网关这类组件,各自有请求体上限。判断哪一层拦的技巧:看返回的 413 响应头与页面特征,Nginx 的默认错误页、框架的 JSON 错误、WAF 的拦截页长相都不同,一眼可辨。 **收尾。**四处上限保持一致的梯度:前端预检等于业务上限,Nginx 与 PHP 略大于业务值,框架校验等于业务值。放开上限的同时记得评估带宽与内存影响,别为偶尔的大文件把整个入口敞开。改动全部记录,下次同样的报错直接翻笔记。顺云云服务器部署 PHP 站点时,四处上限的核对放进同一步上线检查完成。上传上限属于安全基线的一部分,每年复查一次。下一篇: 数据导出指引发布