0%

加速Emby播放——免费CDN的收集与使用

由于种种原因,寻找一台拥有足够大的硬盘、充足的带宽和流量、令人满意的连接速度的服务器是比较困难的,尤其是在国内访问搭建在外网的Emby服务器时。这时,使用CDN加速Emby源站就成为了一个不错的方法。

下面我将介绍几款免费的CDN服务并用它们来加速Emby源站。

Cloudfalre

首先是我们的老朋友、全球最大的CDN服务提供商之一Cloudflare。在Emby的官方社区里有一篇帖子:HOW TO: Recommended Cloudflare Settings,这篇帖子里详细讲述了Cloudflare CDN的相关配置。

值得注意的是,虽然帖子中提及的Cloudflare自助服务订阅协议第2.8条在2023年5月16日已经被移除(Goodbye, section 2.8 and hello to Cloudflare’s new terms of service),但是对于托管在Cloudflare提供的服务(Stream, Images,R2)以外的视频和大文件仍将在Cloudflare CDN上受到限制。即使使用缓存绕过规则,您的视频仍然通过他们的系统,并且在技术上违反了他们的 TOS。如果您选择继续,使用 Cloudflare 的风险由您自行承担。 相关博文引用如下:

Finally, we made it clear that customers can serve video and other large files using the CDN so long as that content is hosted by a Cloudflare service like Stream, Images, or R2. This will allow customers to confidently innovate on our Developer Platform while leveraging the speed, security, and reliability of our CDN. Video and large files hosted outside of Cloudflare will still be restricted on our CDN, but we think that our service features, generous free tier, and competitive pricing (including zero egress fees on R2) make for a compelling package for developers that want to access the reach and performance of our network.

由于Cloudflare的面板在不断变化,一些配置项的位置可能与博客撰写时不一致。请自行寻找

  1. 首先,你需要一个域名并添加到Cloudflare DNS服务(为了文章简洁,使用CNAME接入这里暂不考虑)。在Cloudflare DNS服务中添加解析记录指向Emby服务器,并配置好Emby服务器上的网页服务器(可以使用Nginx、Apache反代Emby服务,或者直接在Emby服务器配置-网络中更改)。为了能使用Cloudflare CDN的缓存功能,应尽量将端口设置为80或443端口。注意,在添加DNS解析记录时,应将代理状态打开(后面的云朵图标为橙色且有“已代理”字样即为打开)。

  2. 禁用Auto Minify和Rocket Loader功能。假设从添加DNS记录的页面出发,在左侧的导航栏中找到“速度”选项卡,再点击“优化”子选项卡;在打开的页面中,选择“内容优化”选项卡。在“内容优化”选项卡中,找到Auto Minify和Rocket Loader两项并将其禁用,配置完成后应如图所示:

    建议状态

    同时,可以启用Brotli 压缩,你也可以在“内容优化”选项卡中找到。

    1. 配置全局缓存。现在转到“缓存”选项卡,然后选择“配置”子选项卡。首先,设置“缓存级别”为标准。

      你也可以选择一个比较长的“浏览器缓存 TTL”。这个影响网站内容在用户本地计算机浏览器的缓存时间。

    2. 配置缓存规则。接下来转到“规则”选项卡,然后选择“页面规则”子选项卡,添加两个规则:

      马赛克遮蔽的是访问Emby服务器的域名(第一步中解析的记录+域名),下面对两个规则进行介绍。

      • /emby/videos/*/*是Emby服务器传输视频文件的路径,它看起来一般是这样的/emby/videos/2350/stream.mp4。在第一条规则中,我们将绕开对视频文件的缓存。由于Cloudflare的将在把数据发送给用户前缓存一个完整的块,缓存视频文件将导致播放延迟。

      • /emby/Items/*/Images/Primary*是Emby服务器传输图片的路径,它看起来一般是这样的/emby/Items/1918/Images/Primary。因为Cloudflare只缓存已知的文件URL,如*.jpg或者*.png等。Emby提供没有扩展名的webp图像,所以Cloudflare不知道缓存这些项目。但是99%的Emby图像来自该路径,因此我们将强制在边缘节点缓存来自此URL的所有内容一个月。

Cloudfront

虽然名字和Cloudflare很像,但是Cloudfront是AWS推出的CDN加速服务。它向用户免费提供1TB的传出数据(边缘节点到用户)和10M次HTTP和HTTPS请求(共计10M)。作为AWS Free Tier的一部分,使用Cloudfront需要一张外币信用卡作为验证以注册AWS账户。在开始配置Cloudfront之前,你需要将Emby服务器配置好域名访问。

注意:请不要开启博客内容中使用的功能以外的任何功能,任意额外的操作都可能导致免费计划以外的扣费

Cloudfront的回源流量(Cloudfront边缘节点上传到源服务器的流量)并不免费,注意不要向加速域名上传文件,小流量使用一般AWS会免除费用。

  1. 打开AWS控制台,找到“Cloudfront”服务,点击右上角的橙色按钮“创建分配”。在“源域”中填写Emby服务器的域名,“源名称”随意填写。不要启用启用源护盾!!不要启用启用源护盾!!不要启用启用源护盾!! 这是一个另外的收费服务且不包含在免费计划中。

    “查看器协议策略”选择“HTTP and HTTPS”或者“HTTPS only”(“Redirect HTTP to HTTPS”请求收费)。“允许的 HTTP 方法”选择“GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE”。“缓存键和源请求”选择“Legacy cache settings”配置方法,下面三个配置项的翻译有一些不准确,第一个应该是请求头,这里配置为“无”;查询字符串是网站URL中?后面的内容,这里设置为“全部”,否则会无法登录;Cookie也选择“全部”。

    不要启用Web应用程序防火墙(WAF)!!不要启用Web应用程序防火墙(WAF)!!不要启用Web应用程序防火墙(WAF)!! 免费计划中只有AWS WAF Bot Control,现在配置中的这个是收费的。

    “价格级别”选择“使用所有边缘站点(最佳性能)”,“标准日志记录”保持关闭,这个也是额外收费的。“IPv6”按需打开,但一般没有IPv4访问效果好。最后点击最下方的橙色按钮“创建分配”。

  2. 点击刚刚创建的分配,再点击“行为”标签页,点击橙色按钮“创建行为”,在“路径模式”中填入/emby/Items/*/Images/Primary*。“缓存键和源请求”选择“Cache policy and origin request policy (recommended)”配置方法,“缓存策略”选“CachingOptimized”,“源请求策略”保持“无”就行。最后点击最下方的橙色按钮“创建分配”。再进入“行为”标签页,将刚刚创建的行为上移到第一个。

  3. 点击“失效”标签页,点击橙色按钮“创建失效”。“添加对象路径”中填写/emby/videos/*/*。最后点击最下方的橙色按钮“创建失效”。这一步是为了绕过视频文件的缓存。

  4. (可选)点击“地理限制”标签页,可以在这里配置允许访问该cdn加速域名的地区。

  5. 最后,回到Cloudfront分配总览界面,等该分配的“上次修改时间”变化为具体时间就可以访问试试了。

文章历史

  • 2023.07.22:Cloudfalre,Cloudfront