Nginx反向代理MP4视频时无法边收边发即时播放的解决方法
分类 网站技术/村民张先生 发布于 2020-03-02 14:13
默认情况下,如果Nginx启用了缓存(proxy_cache),当首次请求一个mp4文件且指定了 range 范围时,Nginx需要从源站取回整个mp4文件后才能返回给客户端浏览器,期间连接一直处于pending等待状态,严重影响用户体验。
解决方法:
1、确认你的Nginx版本在1.9.8以上(截至2020年3月,最新稳定版本为1.16.1)。
2、在shell界面输入 nginx -V 查看一下 configure arguments(配置参数)中是否存在 --with-http_slice_module 模块,如果不存在,你需要重新编译安装Nginx。
3、在反向代理配置中proxy_cache前增加:
slice 5m; proxy_set_header Range $slice_range;
其中的5m表示切片大小,自行修改。另外,
proxy_cache_key末尾需要增加 $slice_range 参数,例如:
proxy_cache_key $scheme$host$request_uri$slice_range;
proxy_cache_valid 中增加206状态码的缓存,例如:
proxy_cache_valid 200 206 180d;
大功告成。参考资料:
https://nginx.org/en/docs/http/ngx_http_slice_module.html
https://pureage.info/2015/12/10/nginx-slice-module.html
https://blog.csdn.net/guowenyan001/article/details/50836490
另:如果源站是阿里云OSS,可能需要添加以下header,否则末尾可能无法加载。
proxy_set_header x-oss-range-behavior standard;
欢迎谈谈你的看法(无须登录) *正文中请勿包含"http://"否则将被拦截