linux面板系列 使用宝塔面板(nginx)配置peertube(HLS)反向代理
本文最后更新于 339 天前,其中的信息可能已经有所发展或是发生改变,如有失效可到评论区留言。

在我搭建好peertube以后,惯例使用宝塔面板(自带的nginx)配置反向代理(前文提到过,搭建peertube docker的时候就要使用-e参数指定用来访问peertube的域名、是否使用https以及使用的端口,具体步骤参见:docker系列 搭建基于peertube的私人视频分享平台(上)),但是配置好以后发现一个问题:所有其他访问都正常(配置、上传视频等),但是在播放视频的时候,iphone上的safari和chrome貌似可以播放,但是明显慢了很多,要转半天圈,而mac上的浏览器(chrome、safari)播放直接转圈,最后报错如下:

image.png

这让我有点懵了,为啥iphone貌似可以(虽然很慢),但是mac上却完全不行?用“HLS.js error: networkError – fatal: false – fragLoadError”去国外论坛上搜索了半天,各种建议,但是和我眼下的环境却完全不搭边。peertube上就那么几个选项,连看起来可能有关的都没有,问题应该和peertube无关,那难道还会和nginx有关?但是我在宝塔上配置无数的反向代理,都没遇到过问题,能是啥原因呢?

看了下peertube上存放的视频,都已经被转码成HLS:

image.png

难道是HLS方式的NGINX反向代理配置上有啥特殊之处?又是一通搜索,验证,最终发现还真是,这与nginx的2个参数有关:proxy_buffering(缓冲)和proxy_cache(缓存)。

proxy_buffering

主要是实现被代理的服务器(应用)的响应数据和客户端的请求异步。一般来说nginx作为应用的反向代理时,大概率是和应用在一个内网里,相对于访问客户端而言,nginx和应用之间的网络质量更值得信任,所以客户端请求达到nginx,被并nginx转发到应用之后,nginx会先将来自被代理的服务器(应用)的响应放在自身的"buffer"里,然后根据"proxy_busy_buffer_size"设置的值来决定什么时候开始把响应数据返回给客户端。在此过程中,如果所有的buffer被写满, 数据将会写入到temp_file中。该功能如果关闭,nginx收到应用发回的响应包会直接返回给客户端。

proxy_cache

主要是实现将从被代理的服务器(应用)上获取到的响应数据根据预设规则缓存到nginx上, 当客户端请求到达nginx时,nginx会把缓存的响应数据(如果有的话)直接返回给客户端,而不需要每次都重新向被代理服务器(应用)去取,这样既节省了被代理服务器的资源,同时也提高了客户端获取效应的速度。该功能如果关闭,nginx每次收到客户端发来的请求,都会转发给应用,然后把应用返回的响应数据直接发回给客户端。

proxy_buffering默认为on,proxy_cache默认理论上为off。这2个功能都和nginx作为反向代理时对客户端请求的响应方式有关。如果2个功能同时打开,和HLS这类流媒体同时存在,是否会有啥“兼容性”问题?为了验证这个问题,先尝试关闭proxy_buffering:

proxy_buffering off;   

加在反向代理所在的location部分,如下:

image.png

结果没用。然后在加上关闭proxy_cache:

proxy_cache off;

image.png

问题解决。。。这个就奇了怪了,理论上,proxy_buffering on应该是proxy_cache生效的前置条件,proxy_buffering都off了,为啥要必须显式指定proxy_cache off?

不过,目前我只发现这个设置和启用HLS的流媒体有关系,而我用minio搭建的COS生成的链接https://*.xxx.mp4不加这个设置在浏览器里播放也没有关系,可能只是和流媒体有关?大家以后遇到类似的流媒体用nginx做反向代理遇到了问题可以试试这个解决方法。

博客内容均系原创,转载请注明出处!更多博客文章,可以移步至网站地图了解。博客的RSS地址为:https://blog.tangwudi.com/feed,欢迎订阅;如有需要,可以加入Telegram群一起讨论问题。

评论

  1. 嘿嘿嘿
    Windows Chrome 131.0.0.0
    3 周前
    2024-12-26 11:00:38

    我不是宝塔面板,是宿主机的nginx代理,我关掉文中的两个设置也是不可以观看视频,只能上传;如果不代理的情况下倒是可以看视频,就是无法使用https了,只能http了,请问是否能给出个nginx的模板配置呢

    • 博主
      嘿嘿嘿
      Macintosh Chrome 131.0.0.0
      3 周前
      2024-12-26 15:22:07

      你的部署环境是怎么样的?内网环境?还是nginx反向代理发布peertube到公网,反代访问请求到内网?

      • 嘿嘿嘿
        tangwudi
        Android SamsungBrowser 27.1
        2 周前
        2024-12-28 14:14:47

        感谢您的回复,已解决。把原来nginx代理中的http://127.0.0.1:端口改为https://127.0.0.1:端口就正常了。虽不理解,但确实work了。

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
       

本站已禁用鼠标右键和各种快捷键,代码块内容可以直接在右上角点击复制按钮进行复制

zh_CN