413错误是Nginx限制请求体大小所致,需在server块中设置client_max_body_size(如100M),并同步调整超时、代理缓冲等参数,最后通过nginx -t和日志验证生效。

上传图片失败报 413 Request Entity Too Large
这是 Nginx 拦下来的典型信号,不是 PHP 或后端代码的问题。宝塔面板默认的 client_max_body_size 是 50M,但很多用户上传单张高清图就超 10MB,再加个表单字段或多个文件,很容易触顶。
实操上别只改宝塔界面里的“PHP 设置”——那只是控制 upload_max_filesize 和 post_max_size,对 Nginx 层无效。
- 必须进 Nginx 配置:站点 → 设置 → 配置文件,在
server块里(通常在location / { ... }外层)加一行:client_max_body_size 100M; - 如果用了反向代理(比如套了 Cloudflare 或自建 proxy),还要检查上游服务是否也限制了体大小,否则 Nginx 放行了,后端照样拒收
- 改完记得执行
nginx -t验证语法,再systemctl reload nginx(或在宝塔里点重载配置),restart不必要,还可能中断连接
宝塔里改了没生效?检查配置是否被覆盖
宝塔会自动管理配置文件,但它生成的规则可能被你手动加的内容“包住”或“忽略”。常见陷阱是把 client_max_body_size 写在了 location 块里,而 Nginx 规则是:该指令只在 http、server、location 三级生效,但写在 location 里时,只对该路径生效;如果上传走的是 /api/upload,而你只在根 location / 加了,就可能漏掉。
- 推荐统一写在
server块开头,确保全局覆盖 - 检查有没有重复定义:搜索整个配置文件里的
client_max_body_size,Nginx 以最后出现的为准,多处设置容易互相覆盖 - 宝塔升级后可能重写配置,建议把修改加在“配置文件”页最下方的「网站自定义脚本」区域(如果有),或用宝塔的「配置修改」→「保存并重启」流程,避免直接编辑被覆盖
上传大图卡在 100% 不回调?可能是超时或缓冲区问题
413 是明确拒绝,但上传卡住、前端无响应、Nginx 日志里没报错,大概率是超时或代理缓冲区撑爆了。尤其用宝塔搭 WordPress 或 Vue+Node 后端时常见。
- 加两个关键超时配置(同样放在
server块):client_body_timeout 300;和client_header_timeout 300;,避免慢网用户传大图时被断连 - 如果用了
proxy_pass(比如把请求转给本地 Node 服务),必须同步设proxy_buffering off;或加大缓冲:proxy_buffers 8 16k;、proxy_buffer_size 32k;,否则 Nginx 默认缓冲区只有 4K–8K,大图直接卡死 - Chrome 浏览器对单个请求有约 5 分钟硬性超时,所以
300秒已是上限,别设更高
为什么调大了还是上传失败?查日志比猜更可靠
别靠浏览器提示或前端 alert 判断,Nginx 的真实反馈全在日志里。宝塔默认把错误日志关得很严,得手动开。
- 打开站点配置 → 日志 → 错误日志级别,改成
info或debug(临时用,别长期开debug) - 上传失败后立刻看
/www/wwwlogs/你的域名.error.log,重点搜client intended to send too large body(对应 413)、upstream prematurely closed connection(缓冲或超时)、no live upstreams(代理崩了) - 如果日志空空如也,说明请求根本没进 Nginx —— 这时候要查防火墙、CDN 设置、或浏览器 CORS 预检失败(但预检失败通常是 405 或 502,不是上传卡住)
真正麻烦的从来不是改哪行配置,而是改完不知道它到底有没有跑在你认为的那个配置块里。多看一眼 nginx -T(大写 T,输出全部生效配置)比反复重启三次更省时间。


















