三
三股水
三
三股水

宝塔 Nginx 上传文件 413 错误排查教程

本文从 Obsidian 撰写发布

宝塔 Nginx 上传文件 413 错误排查教程

一、问题现象

  • 上传文件超过 50MB 时失败
  • 页面提示 413 Request Entity Too Large
  • 小于 50MB 的文件可以正常上传

二、排查思路

文件上传请求通常要经过多层服务,任何一层的请求体大小限制都可能导致 413:

浏览器 → 宝塔 Nginx(反代)→ 应用容器 → 应用框架

核心原则:从最外层开始,逐层确认请求是否到达,定位到真正返回 413 的那一层。

三、定位过程

1. 查看 Nginx 最终生效的配置

nginx -T 2>/dev/null | grep -n "client_max_body_size"

如果输出类似:

36:        client_max_body_size 50m;

说明 Nginx 里有一处 50m 的限制,与“超过 50M 失败”的现象吻合。

2. 确认限制来自哪个配置文件

# 查看宝塔站点的 extension 扩展配置
ls -l /www/server/panel/vhost/nginx/extension/<你的域名>/
cat /www/server/panel/vhost/nginx/extension/<你的域名>/*.conf

# 查看宝塔全局 nginx.conf
grep -n "client_max_body_size" /www/server/nginx/conf/nginx.conf

本例中,全局 /www/server/nginx/conf/nginx.conf 第 35 行有 client_max_body_size 50m;,它会在所有站点生效。

3. 确认应用容器本身是否有限制

查看应用日志,确认超过 50MB 的请求是否能到达应用:

docker logs -f <应用容器名>

如果日志里能看到 50MB 以上文件成功入库的记录,说明应用层没有问题,413 来自它前面的代理。

四、解决方案

不要直接改全局配置(会影响服务器上所有站点)。推荐在需要大文件上传的站点里单独覆盖。

1. 打开站点配置文件

宝塔面板 → 网站 → 找到对应站点 → 设置 → 配置文件

2. 添加站点级配置

在 server { } 块内,server_name 下面加一行:

client_max_body_size 200m;

注意:

  • 单位用小写 m,写 200M 可能被 Nginx 忽略
  • 数值按需调整,200m 只是示例

3. 校验并重载

nginx -t && systemctl reload nginx

4. 验证生效

nginx -T 2>/dev/null | grep -n "client_max_body_size"

应能看到两行:

36:        client_max_body_size 50m;      # 全局(被覆盖)
470:    client_max_body_size 200m;         # 站点级(生效)

Nginx 规则:同一 server 块内,站点级配置优先于全局配置。访问该域名时生效的是 200m。

五、验证结果

刷新页面,重新上传之前失败的文件,上传成功。

六、关键要点

要点说明
逐层排查上传失败不一定是应用的问题,要从最外层代理开始查
看日志定位应用日志里能看到成功的大文件上传,说明问题在代理层
优先改站点在站点配置里覆盖,不改全局,避免影响其他站点
单位写法用小写 m,写 M 可能不生效
持久化宝塔站点配置会自动持久保存,重启不会丢失

七、常用排查命令速查

# 查看 Nginx 最终生效配置里的请求体限制
nginx -T 2>/dev/null | grep -n "client_max_body_size"

# 查看宝塔全局配置
grep -n "client_max_body_size" /www/server/nginx/conf/nginx.conf

# 查看站点 extension 扩展配置
cat /www/server/panel/vhost/nginx/extension/<域名>/*.conf

# 校验并重载 Nginx
nginx -t && systemctl reload nginx

# 实时查看应用容器日志
docker logs -f <容器名>

八、注意事项

  • 如果站点配置里存在多个 client_max_body_size,Nginx 会以最后出现的为准
  • 如果改完站点级配置仍然 413,检查前面是否还有 CDN、WAF 或云负载均衡,它们也有各自的请求体限制
  • 应用框架本身(如 PHP 的 upload_max_filesize、post_max_size)也可能有限制,需一并检查
上一篇 重启RSS阅读工具折腾! 下一篇 Obsidian RSS Dashboard 二次开发初步尝试

暂无评论

Ctrl + Enter 发送

还没有评论,来说点什么吧

© 2026 三股水