server 里 client_max_body_size 设了 20m,上传 1.2MB 的图片还是 413 Request Entity Too Large,nginx -T 能看到这行。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,请求可能落在另一个 server 或 location,配置没有继承到实际处理的那一段。前面还有一层 Ingress 或网关,它的 body 限制先返回了 413。

「413 仍生效」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

nginx -T | grep -n -B5 -A5 client_max_body_size
curl -v -F file=@1.2m.jpg https://api.example.com/upload

同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。

改完隔一天再看一次,当场正常不代表能稳住。

具体做法是,用 nginx -T 确认生效配置里 413 所在 server 的 server_name 和 listen;在 access.log 里加 host 和 request_uri 定位实际命中的虚拟主机;检查 ingress-nginx 的 proxy-body-size 注解或云负载均衡的限制;三层都放开后再传一次同一个文件。

最后用这个标准收尾,同一个文件返回 200 响应里能看到上传后的文件 id。

作者 9823189