必须采用“多层防御+动态鉴权”组合方案:精准隔离流媒体路径、referer白名单+严格响应控制、强制签名url鉴权(含ip绑定与时效性)、叠加限流与ua过滤等行为防护。

为视频流媒体资源(如 HLS、HTTP-FLV、DASH)配置严密的防盗链与防下载切片策略,不能只依赖 Referer 检查——因为流媒体切片(.ts、.m3u8、.flv)极易被工具批量抓取,且 Referer 可伪造、浏览器插件可绕过。必须采用“多层防御+动态鉴权”组合方案。
精准定位流媒体资源路径并隔离处理
避免将防盗链规则放在 location / 或宽泛路径下,防止误拦 HTML 页面或 API 接口。应按协议和路径严格划分:
- HLS 资源统一托管在
/hls/或/live/下,例如:location ^~ /hls/ - HTTP-FLV 流路径设为
/flv/,并确保该 location 不继承 root 或 index 指令 - DASH 的
.mpd和.m4s文件建议统一置于/dash/,禁止目录浏览(autoindex off) - 所有流媒体路径禁用
try_files,防止通过路径拼接绕过校验
启用 Referer 白名单 + 严格响应控制
Referer 是第一道防线,虽可伪造但能拦截 90% 以上普通盗链。关键在于配置严谨:
- 使用
valid_referers none blocked *.yourdomain.com yourdomain.com,不加www以外的泛域名(如*.com),避免过度放行 - 对
.m3u8和.mpd主索引文件返回403;对.ts、.m4s、.flv等切片也必须同样校验——不能只保护索引 - 禁止用
rewrite跳转提示图,因流媒体客户端不渲染图片;必须用return 403或return 404(更隐蔽) - 确保
/hls/forbidden.jpg等提示资源本身不在防盗链 location 内,否则会形成死循环
强制签名 URL 鉴权(核心防下载手段)
单纯 Referer 对自动化下载器完全无效。必须为每个切片生成有时效性、IP 绑定、URI 签名的 URL:
- 使用
ngx_http_secure_link_module(Nginx 内置):对/hls/xxx.m3u8?st=xxx&e=xxx进行时间戳+哈希校验 - 或接入业务后端签发 Token:播放页请求时由服务端生成含
exp、ip、uri的 JWT,Nginx 用auth_request模块实时校验 - 签名 URL 必须包含客户端真实 IP(
$remote_addr),防止 Token 被共享;过期时间建议 ≤ 30 分钟 -
.m3u8文件内引用的每个.ts地址也必须带相同签名参数,否则播放器会直接请求无参地址而绕过鉴权
补充强化措施阻断批量抓取
针对专业爬虫和下载工具,需叠加行为级防护:
- 限制单 IP 单位时间内请求数:用
limit_req控制/hls/路径下每秒最多 3 个请求(burst=5 nodelay) - 拒绝已知下载 User-Agent:如
you-get、ffmpeg、curl(非浏览器 UA),用if ($http_user_agent ~* "wget|curl|aria2") { return 403; } - 对
.m3u8响应头添加X-Content-Type-Options: nosniff和X-Frame-Options: DENY,防止 iframe 嵌入或 MIME 类型混淆 - 禁用 HTTP 缓存关键索引文件:
add_header Cache-Control "no-store, no-cache, must-revalidate";











