413错误由Nginx的client_max_body_size限制触发,PHP未执行;需在server块中修改该值并重载Nginx,同时同步调整PHP的upload_max_filesize和post_max_size,且post_max_size≥upload_max_filesize。

413 Request Entity Too Large 是 Nginx 拦的,不是 PHP
这个错误本质是 Nginx 在收到请求体时,发现它超过了 client_max_body_size 的限制,直接拒绝转发给后端——PHP 根本没机会执行。所以只改 PHP 的 upload_max_filesize 或 post_max_size 没用,必须先过 Nginx 这关。
常见误操作:在宝塔面板里只调大了 PHP 配置,上传还是 413;或者只改了站点配置里的 Nginx 设置,但没重启 Nginx 服务。
- 确认当前限制值:在宝塔「网站」→「设置」→「配置文件」里搜索
client_max_body_size,没找到就说明用的是默认值(1M) - 修改位置:必须加在
server块内(不是http或location),推荐放在server { ... }开头附近 - 写法示例:
client_max_body_size 200m;(注意结尾分号) - 改完务必点击宝塔右上角「重载配置」或手动执行
nginx -t && systemctl reload nginx
PHP 上传限制要和 Nginx 对齐,且两个参数都得调
PHP 层有两道检查:upload_max_filesize 控制单个文件上限,post_max_size 控制整个 POST 请求体(含多文件、表单字段等)总大小。如果后者比前者小,哪怕传一个文件也会失败。
宝塔里改 PHP 配置容易漏掉其中一个,或者设成不匹配的值(比如 upload_max_filesize = 100M,但 post_max_size = 8M)。
立即学习“PHP免费学习笔记(深入)”;
- 进宝塔「PHP 设置」→「配置修改」,同时调整这两项,建议
post_max_size≥upload_max_filesize(例如都设为200M) - 改完点「保存」,再点「重载 PHP」(不是重启,重载即可)
- 验证是否生效:建个
phpinfo.php文件,访问看upload_max_filesize和post_max_size行的值是否更新
宝塔里改了却没生效?重点查这三个地方
改配置后仍报 413,大概率是改错了位置、没重载、或被其他配置覆盖。宝塔的配置结构容易让人迷糊。
- 站点配置中写了
client_max_body_size,但全局 Nginx 配置(/www/server/nginx/conf/nginx.conf)里也有同名指令——以最内层(server块)为准,但若站点配置被注释或语法错误,会回退到全局值 - 用了反向代理或 SSL:某些宝塔模板会在
location ~ \.php$里加proxy_buffering off等,但不会影响 body 大小,别被带偏 - 浏览器缓存了 413 响应:用
curl -v -F "file=@test.zip" https://yoursite.com/upload.php直接测试,绕过浏览器缓存和 JS 逻辑
超大文件(>500MB)上传还要注意超时和稳定性
调大尺寸只是第一步。Nginx 默认 client_body_timeout 是 60 秒,上传慢一点就会中断;PHP 的 max_execution_time 和 max_input_time 也得同步放宽,否则文件还没收完就超时了。
- Nginx 加两行:
client_body_timeout 300;和client_header_timeout 300;(单位秒) - PHP 配置补上:
max_execution_time = 600、max_input_time = 600(注意:设为 0 表示不限制,生产环境慎用) - 实际上传时,建议用支持断点续传的前端方案(如 webuploader、uppy),而不是纯表单 submit——网络抖动时更可靠
真正卡住的往往不是“设多少”,而是“在哪设”和“设完有没有真生效”。每次改完,用 nginx -t 检查语法,用 curl 直接测接口,比刷网页看错误快得多。



















