大张小站

  1. @八角石

    欢迎关注我的新浪微博 @八角石 !

    [ 更多详情 ]

  2. 人生

    自歌自舞自开怀,且喜无拘无碍。

  3. 心境

    若得心净如明月,长空万里了无尘。

  4. 情渊

    他生莫做有情痴,人间无地著相思。

  • 1
  • 2
  • 3
  • 4
2,580

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.vdazhang.com/wenzhang-2331.html
若您喜欢这篇文章,欢迎订阅大张小站以获得最新内容。 / 欢迎交流探讨,请发电子邮件至 mail[at]vdazhang.com 。


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