PHP上传2GB文件报413 Request Entity Too Large错误原因排查

你在.htaccess中配置的都是PHP运行时参数,且已经通过phpinfo确认配置生效,这只能证明PHP层的上传限制符合要求。413 Request Entity Too Large错误是在请求到达PHP处理流程之前,由前置的Web服务、反向代理或网关层拦截抛出的,调整PHP参数无法解决这个问题。
常见触发原因和对应解决方法如下:
- Nginx服务/反向代理拦截
Nginx默认单请求体大小上限仅为1MB,远小于2GB的上传需求。你需要在Nginx配置的http块、对应站点的server块,或者上传接口对应的location块中添加配置:
修改完成后执行client_max_body_size 3000M;nginx -s reload重载配置即可生效。 - Apache服务自身限制
如果你直接使用Apache作为Web服务,除了PHP参数外,还需要检查Apache的目录/虚拟主机配置中是否设置了LimitRequestBody参数:如果该参数值小于2GB,会直接拦截大请求返回413。你可以将该值调整为3145728000(即3000MB对应的字节数),或者设置为0代表不限制请求体大小,修改完成后重启Apache服务生效。
如果你开启了mod_security等WAF模块,也需要检查模块规则中的请求体大小限制,将阈值调整到3000M以上。 - 前置网关/CDN/云负载均衡拦截
如果你的站点外层套了CDN、云WAF、负载均衡服务,这类网关产品默认通常设置1GB~2GB的单请求体上限,2GB文件刚好触发阈值。你需要登录对应云服务控制台,调整上传大小限制阈值,或者给大文件上传接口配置透传规则,让请求直接转发到源站不经过网关大小校验。
内容的提问来源于stack exchange,提问作者Jitu
相关产品推荐
相关产品推荐

