后台传三十 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 顺序覆盖的情况很常见,改完一定要回看输出确认。报错文案容易误导,真正的原因往往在相邻那一层的日志里。