一个 2GB 安装包上传到 95% 后中断,浏览器只报“网络错误”,网关日志却出现 413、502、504;重试成功也常无法续传。请求可能尚未到应用就被入口拦截,也可能卡在临时目录、代理缓冲或超时边界。按状态码和日志时间线逐层定位,才能避免盲目调大参数。
如果你正在选机器,或者想先把线路和配置跑通再谈长期方案,可以先看看这几家的线路说明和技术参数:lisahost(香港机房专属机柜与带宽),先看清带宽线路、流量策略和退款条款,再决定要不要迁。
一、先用状态码圈定中断位置
413 通常表示网关或反向代理拒绝请求体,文件尚未到达业务服务;检查入口路由上限、WAF 规则和统一网关是否重复设限。400/422 多半说明应用已收到请求,但分片大小、校验值或合并顺序不符合协议。499 多由网关记录,表示客户端主动断开,可能是取消或等待响应超时。

502 常指网关连接上游失败,504 表示等待上游响应超时,两者都不能单独证明文件过大。临时文件写入失败常返回 500 或直接重置连接,此时应用日志通常已有异常。应按同一秒关联入口日志、应用日志和对象存储响应:413 前没有应用访问记录,问题在入口;分片已确认而合并超时,问题更靠近存储侧。没有 HTTP 状态码时,还要比较客户端与网关的等待时限。
二、沿请求体、代理缓冲与超时追踪
先确认限制层级。网关的请求体大小限制应匹配单次传输策略,而不是照搬整盘容量;采用分片上传续传后,可按计划分片大小设入口阈值,并记录分片编号与 ETag。对象存储场景优先让客户端直传预签名 URL,避免应用进程长期持有连接。
再查临时目录:核对剩余空间、inode、权限及安全策略,确认请求体是落盘还是全缓存在内存。代理开启请求缓冲时,会先收完整个请求体再转发上游,放大延迟并触发超时;应关闭不必要的代理请求缓冲,或将缓冲目录放到独立磁盘。同步校准客户端、入口、读写链路的上传超时控制,给大文件留出可计算的余量。

判断时做三组对照:同一小文件、临界体积文件、慢速发送。体积越大越早 413,先查请求体限制;小文件稳定而慢传超时,查代理缓冲与读写超时;临时目录 inode 不增长,说明可能在内存中积压。若分片写入成功但合并失败,则核对对象存储并发限制、签名有效期和完成请求。修复时让网关容纳单片、应用支持幂等续传、对象存储校验分片,避免重复上传和半完成对象。
请求体大小限制与代理缓冲:失败可能发生在应用之前
上传失败未必来自业务代码。请求经过 CDN、网关和应用时,每层都可能限长、缓冲或断连。看到 413,先确认由哪一层返回,再核对 Content-Length;multipart 还有表单头与边界开销。client_max_body_size 与 max-request-size 等限制必须一起调整,只改一项无效。
临时文件写入也常被忽略。multipart 内容通常先写入容器临时目录,再进入处理器。目录缺失、权限不符、磁盘或 inode 耗尽、清理任务并发,都会在业务代码运行前失败。应确认临时路径,按容器用户及 SELinux 上下文测试创建、写入、删除,并持续监控空间与 inode。
代理请求缓冲会让上传先落盘再转发,慢请求因此占用临时文件。关闭缓冲虽能流式接收,但应用必须支持流式请求,并限制慢客户端并发。注意 proxy_max_temp_file_size 管的是响应缓存,不是请求体上限。排查时先直连应用,再逐层启用代理,对比状态码和耗时。

分片上传续传与上传超时控制:让上传可恢复、可观测
分片续传需持久化文件哈希、总片数、已确认片号和上传会话。客户端重试前查询服务端,只补传缺片;接口必须具备幂等性,重复提交同一分片不能产生重复数据。合并前校验整文件哈希,成功后原子替换目标并清理废片;对象存储应调用 multipart 的 list 与 complete 接口,不能由客户端自报完成。
超时应区分建连、读写、空闲和任务总期限。proxy_read_timeout 通常是两次读取之间的等待上限,并非整次上传时限。分片大小应按实测速率确定,失败后采用指数退避和随机抖动;单片失败只重传该片,客户端、网关与应用使用一致的总截止时间。
可执行检查清单:①同一文件直连应用、再经代理,记录状态码和耗时;②汇总各层体积限制、缓冲开关与生效配置;③检查临时目录空间、inode、权限及清理日志;④模拟中断和服务重启,验证查状态、补片、幂等与整文件哈希;⑤按最慢分片调整空闲超时,压测慢速、并发上传;⑥记录 request_id、会话、已收字节、耗时和上游状态,监控 413、5xx、超时与磁盘水位。


喜欢
顶
难过
囧
围观
无聊





