«

Nginx上传文件413 Request Entity Too Large解决

时间:2026-11-14 07:10     作者:emer     分类: Nginx


前言

后台上传图片、附件或视频时,Nginx 返回 413 Request Entity Too Large,文件传不上去。这是 Nginx 的客户端请求体大小限制在拦截,默认通常只有 1MB,而 PHP 也有自己的上传限制,两层都要放开。本文讲解 Nginx 的 client_max_body_size 配置位置、与 PHP upload_max_filesize/post_max_size 的配合,以及验证方法。

操作步骤

1. 在 http 或 server/location 块设置上传大小

http {
    client_max_body_size 50m;
}

也可只在某个站点:

server {
    client_max_body_size 50m;
}

2. 修改 PHP 上传限制(php.ini)

php --ini

找到 php.ini,修改:

upload_max_filesize = 50M
post_max_size = 55M

post_max_size 要略大于 upload_max_filesize。

3. 重启 PHP-FPM 并重载 Nginx

systemctl restart php-fpm
nginx -t
nginx -s reload

4. 验证 Nginx 限制

curl -X POST -H "Content-Length: 60000000" http://域名/ -o /dev/null -w "%{http_code}\n"

超过限制仍返回 413,未超过则不报错。

5. 宝塔面板用户

站点设置 → 配置文件里直接加 client_max_body_size,或在上传限制选项里调整,同时改 PHP 上传大小。

常见坑

  1. 只改了 Nginx,PHP 的 upload_max_filesize 仍为 2M,文件传到一半被 PHP 拒绝。
  2. post_max_size 小于 upload_max_filesize,上传永远超限。
  3. client_max_body_size 写在错误层级,被上层默认值覆盖。
  4. 改完 php.ini 没重启 php-fpm,参数不生效。
  5. 云服务器或 CDN 还有上传大小限制,Nginx 放开了但中间层拦截。
  6. 大文件上传还需要调整超时时间,避免传输过程中断。
  7. 单位大小写注意,m 和 M 均可,不要写成 mb。

总结

413 的解决是两层联动:Nginx 的 client_max_body_size 放开上限,PHP 的 upload_max_filesize 和 post_max_size 同步放大,再重启 php-fpm、重载 Nginx。CDN 和云网关的限制要单独确认。上传功能上线前用超限文件实测,确认两层都不拦截。

遇到问题加QQ23979811 协助处理

标签: Nginx client_max_body_size 413 上传大小限制