后台传三十 M 的安装包,浏览器直接返回 413 Request Entity Too Large,配置里明明写了一百 m,PHP 的上传限制也调过了。

这类报错背后常见的原因有几处,逐个排除就行。配置写在 http 块里,被 server 块的默认值覆盖掉了。也可能是改完之后没有 reload,worker 还在用旧的配置。

还有一种情况,前面还有负载均衡或者 CDN,它们的限制比源站更小。

动手时先确认真正生效的配置来源

nginx -T | grep -n client_max_body_size

然后改完先测再平滑重载

nginx -t && nginx -s reload

同步核对 PHP 的上传限制

php -i | grep -E 'upload_max_filesize|post_max_size'

等前面都确认过,再确认前置层没有拦截

curl -I -F file=@30m.bin https://example.com/upload

报错是间歇性的,我蹲守了半小时才抓到一次完整现场。

白天有业务在跑,能验证的部分都压到了晚上做。

恢复的判定其实很直接。再次上传三十 M 文件返回两百,nginx error.log 里不再出现 413,上传目录能看到完整文件。

容易忽略的是,nginx -T 才是真正加载的完整配置,conf.d 里被 include 顺序覆盖的情况很常见,改完一定要回看输出确认。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189