Nginx流媒体代理功能初探

温馨提示:本文最后修改于 50 天前,部分内容可能已经过时。如文章内容或静态资源失效,请联系我进行更新,谢谢~

背景(只关心技术实现的不用看)

最近在复习大物,所以在web技术上并没有太多的突破。我有便复习边听音乐的习惯,然而很多我喜欢的音乐都听过很多遍了,作为一个(伪)收音机爱好者,边复习边听国际广播似乎也是个不同的选择。然而VOA的 、RFA的节目有时稍显弱智,NHK的节目时长太短,KBS、RTI很多时段的的节目我不喜欢,我最喜欢的是RFI这样的电台,客观而有深度。然而...只有RFI的节目源被墙了,不翻墙很难收听,就算翻了墙也容易出现断流的现象。有没有一种方法可以稳定的收听RFI的节目呢?

——当然有!那就是Nginx的流媒体代理功能!

它可以代理常见的.m3u8 .ts .mp3等多种格式的流媒体。

Nginx配置

这个功能需要用到一个Nginx模块 http_sub_module.请确认你的Nginx服务器安装了这个模块,方法也很简单:
  1. 运行命令nginx -V
  2. 检查输出结果是否包含--with-http_sub_module,没有就表示没安装,需要进行安装。

如果你是自己编译安装的Nginx,网上有很多添加模块重新编译的教程,请自行查找下吧~

我是用的是oneinstack一键安装包,先备份好Nginx配置文件,修改oneinstack配置文件后卸载Nginx并进行重装即可安装模块。

  1. 备份Nginx配置文件cp -r /usr/local/nginx/conf/. /home/conf/
  2. 进入oneinstack目录,编辑配置文件vim options.conf
  3. 在第37行,nginx_modules_options处加入--with-http_sub_module
  4. 运行卸载程序,注意只卸载Ngnix服务器./uninstall.sh,根据提示进行选择。
  5. 运行安装程序,注意只安装Nignx服务器./install.sh,根据提示进行选择。
  6. 还原配置文件cp -rf /home/conf/. /usr/local/nginx/conf/

现在Nginx的http_sub_module模块已经安装好了~

我们为什么要使用这个比较冷门的模块呢?主要是为了替换m3u8文件中的.aac格式的连接。m3u8文件只是一个“指路标”,指向了音视频文件的地址。因此,我们需要用这个模块,将其中指向源服务器的音视频文件指向我们自己的代理服务器。其他格式如mp3文件原因也是如此。

进入你Nginx的配置文件,在合适的地方加入下面的内容,需要的地方请进行替换:

location ~* \.(m3u8|ts|aac)$ {
    proxy_cache off;                    # 禁用代理缓存
    expires -1;                         # 禁用页面缓存
    proxy_pass http://example.com;      # 反代目标 URL
    sub_filter 'http://example.com/' 'http://$host/';   # 替换 m3u8 文件里的资源链接
    sub_filter_last_modified off;       # 删除原始响应里的浏览器缓存值
    sub_filter_once off;                # 替换所有匹配内容
    sub_filter_types *;                 # 匹配任何 MIME 类型
}

下面是我的配置文件,我需要对RFI进行反代:

location ~* \.(mp3)$ {
    proxy_cache off;
    expires -1;
    proxy_pass http://live02.rfi.fr;
    sub_filter 'http://live02.rfi.fr/' 'https://$host/';
    sub_filter_last_modified off;
    sub_filter_once off;
    sub_filter_types *;
}

没有问题就可以运行systemctl restart nginx重启Nginx了。

如何使用呢?打个比方,比如,原链接是http://example.com/playlist.m3u8,将域名改为你自己的,其它的不变就可以访问了。

Then, Enjoy It!

中间还可以使用CDN加速,经过了一层cloudflare CDN加速,延迟和丢包率都有明显下降,节目的延迟也自然大大下降,收听体验得到了明显提升~

~~End Of File~~

本文永久链接:https://blog.xmgspace.me/archives/nginx-media-proxy.html

本文文章标题:Nginx流媒体代理功能初探

本站欢迎转载与引用~但您需要注明文章标题与链接,并表明转载/引用自Xiaomage's Blog。

授权协议:署名-非商业性使用-相同方式共享 4.0 国际(CC BY 4.0)

标签:Nginx , ShortWave DX , 服务器

已有 2 条评论
  1. xmg666🤗

    1. 哇,是超哥!快,捉活的 i_f02.png

添加新评论

i_f01.pngi_f02.pngi_f03.pngi_f04.pngi_f05.pngi_f06.pngi_f07.pngi_f08.pngi_f09.pngi_f10.pngi_f11.pngi_f12.pngi_f13.pngi_f14.pngi_f15.pngi_f16.pngi_f17.pngi_f18.pngi_f19.pngi_f20.pngi_f21.pngi_f22.pngi_f23.pngi_f24.pngi_f25.pngi_f26.pngi_f27.pngi_f28.pngi_f29.pngi_f30.pngi_f31.pngi_f32.pngi_f33.png