Apache经Cloudflare代理后无法向Safari提供MP4文件求助
Apache+Cloudflare环境下iOS Safari无法加载MP4视频的解决方案
我将MP4视频文件托管在Capnel的Apache服务器上,该服务器通过Cloudflare代理提供服务。视频在非苹果设备的浏览器中可正常加载,但在苹果Safari及其他苹果设备浏览器中完全无法打开。
问题根源
Safari请求视频时会发送Range请求头:无代理情况下Apache会返回206状态码,经Cloudflare代理后本应返回200状态码,但文件被Cloudflare缓存后,实际返回的是206状态码,导致iOS设备无法正常处理媒体请求。
必要背景
iOS设备要求托管媒体文件的HTTP服务器必须支持字节范围请求(Byte-range requests,又称内容范围/部分范围请求),以此实现视频的随机播放功能。多数HTTP 1.1服务器原生支持该请求,但部分服务器与Cloudflare代理的适配存在问题。
你可以通过以下curl命令验证服务器是否支持字节范围请求:
curl -I --range 0-99 http://example.com/test.mp4
已知测试结果
- 将Web服务器替换为LiteSpeed或OpenLiteSpeed,搭配Cloudflare代理后,同一视频可正常加载
- 关闭Cloudflare代理后,无论使用Apache还是LiteSpeed/OpenLiteSpeed,视频均能正常加载,服务器返回206状态码
已尝试但无效的方案(仅在LiteSpeed上生效)
- 禁用Apache的mod_deflate模块
- 配置跳过MP4文件的Cloudflare缓存
恳请各位提供适用于Apache+Cloudflare环境的解决方案。
内容的提问来源于stack exchange,提问作者Laxman Singh
相关产品推荐
相关产品推荐

