大文件上传中断主因是apache反向代理链路在缓冲、超时、会话路由或头部处理环节被切断,需从流式转发、超时协同、状态一致性三方面解决:禁用代理缓冲启用流式透传,同步调高全链路超时值,配置会话保持确保请求路由一致性,并保留range请求与字节偏移能力以支持断点续传。

大文件上传中断不是网速问题,而是 Apache 反向代理链路在缓冲、超时、会话路由或头部处理等环节被切断。关键要从流式转发、超时协同、状态一致性三方面入手,缺一不可。
禁用代理缓冲,启用边收边转
默认情况下,Apache 会把整个上传体缓存在内存里再转发给后端,容易触发 OOM 或超时断连。必须让请求体“流式透传”:
- 在
ProxyPass指令中添加flushpackets=on flushwait=1000,强制分包转发 - 或在
<proxy balancer:></proxy>块中设置proxyset buffer=0 - 显式增大接收缓冲:添加
ProxyReceiveBufferSize 2097152(2MB)
同步调高全链路超时值
中断常因某一层先放弃连接。所有环节的超时必须覆盖最大上传时间(如 30 分钟),且形成递进关系:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
Timeout 1800(客户端空闲总等待时间) -
ProxyTimeout 1800(代理层等待后端响应时间) -
KeepAliveTimeout 60(连接复用存活时间) - 后端服务(如 PHP-FPM 的
request_terminate_timeout、Tomcat 的connectionTimeout)也需 ≥ 1800 秒
确保上传会话全程落在同一后端
若负载均衡器不做粘性调度,一个上传的多个 TCP 包可能被分发到不同节点,导致上下文丢失、状态不一致——这不是超时,是逻辑失败:
- 配置基于 Cookie 或源 IP 的会话保持(stickiness)
- 对上传路径(如
/upload)启用独立路由策略 - 更彻底的做法:改用分片上传 + 预签名 URL,让客户端直传对象存储(OSS/S3),Apache 只做鉴权与跳转
保留 Range 请求与字节偏移能力
断点续传依赖 Range 请求,一旦中间层干扰,重试即失效:
- 检查响应头是否含
Accept-Ranges: bytes;若缺失,关闭mod_deflate对大文件的压缩 - 禁用影响字节定位的配置,如输出过滤或重写规则(避免把静态文件请求代理到 PHP 脚本)
- 确保上游代理透传
Content-Length和Content-Type,否则 Apache 无法正确解析请求体边界










