Apache原生支持大文件断点续传,需启用mod_headers和mod_mime、禁用EnableSendfile与EnableMMAP、为非标后缀显式设置Accept-Ranges bytes,并确保代理透传Range头及文件权限正确。

一、上传侧:允许大请求体并规避超时
分片上传本质是多个小 POST 请求,但单个分片可能较大(如 5MB),且总上传时间长。Apache 需放行请求体,并配合 PHP(若使用)避免中途中断:
-
设置请求体上限:在虚拟主机或目录块中添加
LimitRequestBody 52428800(即 50MB,按最大单片大小设,建议略大于实际分片尺寸) -
禁用影响大文件的内核优化(尤其 NFS 或容器环境):
EnableSendfile offEnableMMAP off -
确保磁盘权限正确:Apache 工作用户(如
www-data)对上传目标目录有rwx权限,文件临时目录可写
二、下载侧:启用原生断点续传支持
分片下载依赖 Range 请求返回 206 响应。Apache 默认支持,但需显式声明和排除干扰:
-
启用必要模块:
运行a2enmod headers mime,确保mod_headers和mod_mime已加载 -
为非标后缀补全 Accept-Ranges 声明(如 .part、.chunk、.bin):
<FilesMatch "\.(part|chunk|bin|iso|zip)$">Header set Accept-Ranges bytes</FilesMatch> -
验证是否生效:
执行curl -I -H "Range: bytes=0-1023" https://yoursite.com/test.bin
若响应含HTTP/1.1 206和Content-Range,说明服务端已就绪
三、绕过代理与 CDN 的干扰
90% 的“无法续传”问题出在上层代理未透传 Range 头:
- Nginx 反代需加:
proxy_pass_request_headers on;和proxy_buffering off; - CDN(如 Cloudflare)需开启 “Range Request” 支持,或关闭缓存静态大文件
- 避免在 .htaccess 中用 mod_rewrite 模拟 Range——Apache 的 Range 解析发生在 rewrite 之前,无效且易出错
四、后端配合要点(简要提醒)
若分片上传由 PHP/Java 等处理,Apache 只负责收发 HTTP 包,后端需:
- 检查
$_SERVER['HTTP_RANGE'](PHP)或等价字段,手动构造 206 响应头 - 用
fseek()+fpassthru()(PHP)或RandomAccessFile(Java)读取指定字节段 - 上传合并阶段避免将全部分片读入内存,优先流式拼接


















