html5视频标签缓存

html5视频标签缓存

我们运行一个非常原始的 Centos 7 LAMP 服务器(带有 mod_pagespeed 的 Apache 2.4、PHP 5.6、MariaDB 5.5),并且最近开始按照代码在某些页面的背景上嵌入 html5 视频:

<video class="banner-video" loop autoplay poster="img/poster.jpg">
    <source src="videos/intro.mp4" type="video/mp4">
</video>

视频工作正常,并按预期自动循环,我们的大多数客户端在第一次运行后加载一次视频并从缓存中重新加载视频,但我们有一些客户端(我目前数到 3 个)在第一次运行后每次都继续重新下载,这很快耗尽了我们的带宽配额(有时同一个 IP 地址会下载 35GB 的同一个 7MB 视频文件)。

我非常确定这种行为不是恶意的(至少在这种情况下,我愿意相信这是他们的代理服务器或类似服务器的一些错误配置),所以我正在寻找限制一个 IP 地址使用的带宽的方法,或者更好地通知客户端浏览器缓存视频文件,我们已经尝试在 apache 虚拟主机中并通过 .htaccess 使用此配置,但似乎没有什么区别。

<FilesMatch "\.(mp4)">
    Header set Cache-Control "max-age=604800, must-revalidate"
</FilesMatch>

我已经测试过将视频文件移动到另一台具有不同配置的服务器(更原始的 Centos 6.6 LAMP),以测试这是否不是我们的配置错误

所以我的问题是,是否有一种简单的方法来阻止使用 apache 配置(暂时 24 小时或一周)仅在 10 次加载后通过某些 ip 地址加载文件,同时保持加载网站其余部分的能力?

或者有没有更好的方法来通知客户端遵守缓存规则?

我可能可以编写一个 PHP 脚本来计算文件加载的次数,如果同一 IP 下载文件超过 X 次,则响应 403,但我不认为这个解决方案是最佳的。

根据 apache 日志显示,我们的客户端正在运行 Windows 10 x64 和 Google Chrome 48(这可能是一个已知的错误)

答案1

只是对这个问题的一个小小的后续回答,所以它不会永远得不到回答,它实际上并没有解决问题,但至少它降低了我们必须支付的费用。

我能够使用配置不当的 squid 服务器作为代理来复制该问题。

在这种情况下,我所做的是将视频以及从那时起我们必须托管的其他视频托管在另一台延迟较高但带宽极其便宜的服务器上。

整体客户端体验没有太大变化,因为我们只在廉价服务器上托管视频文件,所以我们不会为每个文件支付高延迟费用,只需为视频请求支付费用。

相关内容