老张小站

  1. 欢迎光临

    感谢访问老张的博客!

  • 1
2,914

Nginx反向代理MP4视频时无法边收边发即时播放的解决方法

分类 网站技术/村民张先生 发布于 2020-03-02 14:13
0

默认情况下,如果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;
欢迎转载分享,转载请注明 来源:大张小站 https://www.zhang.cq.cn/20202331.html
若您喜欢这篇文章,欢迎订阅老张小站以获得最新内容。 / 欢迎交流探讨,请发电子邮件至 mail[at]vdazhang.com 。


欢迎谈谈你的看法(无须登录) *正文中请勿包含"http://"否则将被拦截