开防盗链致视频黑屏主因是Referer匹配过严:浏览器跨域请求默认不带或仅带域名级Referer,而宝塔默认按完整URL匹配;需在防盗链中正确配置URL后缀、许可域名(不含https://)及勾选允许空Referer,并配合限速与连接控制防刷。

为什么直接开防盗链可能让视频播放失败
很多视频站一开防盗链就全黑屏,不是配置错了,是 Referer 判断太粗暴。苹果CMS、DPlayer、ckplayer 这类前端会用 fetch 或 XMLHttpRequest 加载 .mp4、.m3u8,但现代浏览器对跨域请求默认不带 Referer,或者只带域名不含路径——宝塔防盗链默认按完整 URL 匹配,自然全拦掉。
防盗链里必须填对的三个关键项
进宝塔网站设置 → 防盗链,重点调这三项:
-
URL后缀:必须包含视频资源类型,比如mp4,mp3,m3u8,ts,flv,webm;别漏掉jpg和png(封面图也常被刷) -
许可域名:填你自己的主域名,如www.example.com、example.com,多个用英文逗号分隔;不要写https://前缀,宝塔不认 -
允许空HTTP_REFERER请求:这个要勾上。否则 H5 播放器、PWA、微信内嵌页、甚至某些 CDN 回源都会 403
单靠防盗链不够,得加限速和连接控制
防刷不是只拦来源,更要控流量节奏。在宝塔网站设置 → 网站监控 → 流量限制(或 Nginx 配置中手动加):
- 对
/uploads/、/video/、/static/这类目录启用限速,比如limit_rate 512k(单连接限速 512KB/s) - 用
limit_conn控制单 IP 并发连接数,例如限制每个 IP 最多 3 个视频流:limit_conn addr 3 - 避免把限速套在整个站点,只针对
location ~ \.(mp4|m3u8|ts)$这类块生效,不然会影响 JS/CSS 加载
真实场景下容易忽略的两个点
一是苹果CMS 后台的「播放器设置」里如果启用了「跨域播放」或「代理播放」,实际请求会走你服务器中转,此时防盗链规则要同步匹配代理路径(比如 /proxy.php?url=),而不是原始视频地址;二是某些采集站模板会把视频地址写成相对路径或协议相对路径(//cdn.example.com/xxx.mp4),这种请求的 Referer 是空的,必须依赖「允许空 Referer」+ 白名单域名双重兜底。


















