必须采用“路径隔离+动态鉴权+行为防护”三层策略:精准划分/hls/、/dash/、/vod/等独立路径并禁用try_files;Referer白名单结合none/blocked严格校验;强制签名URL(时效/IP/URI绑定)配合限流与UA过滤。

为视频点播系统的流媒体切片文件(如 .ts、.m3u8、.mp4、.m4s)配置严格防盗链,不能只靠 Referer 检查——因为切片易被批量抓取,Referer 可伪造,浏览器插件或下载工具可绕过。必须采用“路径隔离 + 动态鉴权 + 行为防护”三层组合策略。
精准隔离流媒体资源路径
避免把防盗链规则写在 location / 这类宽泛路径下,防止误拦 HTML 页面、API 或静态资源。应按协议与用途明确划分路径:
- HLS 切片统一托管在
/hls/下(如/hls/20260820/video-123/index.m3u8),该 location 不继承root或index指令 - DASH 资源统一置于
/dash/,禁用目录浏览:autoindex off - 点播 MP4 文件建议走独立路径如
/vod/,不与普通静态资源混用 - 所有流媒体 location 禁用
try_files,防止通过路径拼接(如/hls/../conf/nginx.conf)绕过校验
Referer 白名单 + 强制响应控制
Referer 是基础防线,虽非绝对可靠,但能拦截绝大多数普通盗链行为。关键在于配置严谨:
- 使用
valid_referers none blocked *.yourdomain.com yourdomain.com——none允许地址栏直输、HTTPS→HTTP跳转等合法无 Referer 场景;blocked应对代理/CDN 回源时 Referer 被截断的情况 - 对
.m3u8、.mp4、.ts、.m4s等所有切片级文件统一校验,不能只保护主索引文件 - 非法请求必须返回
return 403或return 404(更隐蔽),禁止用rewrite跳转提示图——播放器不渲染图片,会导致黑屏或加载失败 - 确保提示资源(如
/images/denied.gif)本身不在防盗链 location 内,否则会触发死循环
强制签名 URL 鉴权(防下载核心)
仅靠 Referer 对自动化下载器(ffmpeg、you-get、curl)完全无效。每个切片 URL 必须携带有时效性、IP 绑定、URI 签名的参数:
- 启用
ngx_http_secure_link_module:对/hls/xxx.ts?st=xxx&e=1724142000&md5=xxx做时间戳+哈希校验 - 或由业务后端签发 JWT Token:包含
exp(≤30分钟)、ip(绑定$remote_addr)、uri(完整请求路径),Nginx 用auth_request模块实时校验 -
.m3u8文件内引用的每个.ts地址也必须带相同签名参数——否则播放器会发起无参请求,直接绕过鉴权 - 签名密钥严禁硬编码在 Nginx 配置中,应由后端服务动态提供或通过安全变量注入
叠加限流与 UA 过滤阻断批量抓取
针对专业爬虫和下载工具,需补充行为级防护:
- 限制单 IP 在流媒体路径下的请求频率:
limit_req zone=vod_rate burst=3 nodelay(每秒 ≤3 请求,突发最多 3 个) - 拒绝已知下载工具 User-Agent:
if ($http_user_agent ~* "wget|curl|aria2|you-get|ffmpeg|python-requests") { return 403; } - 可选增强:结合
geo或map模块,对高风险地区 IP 做更严限制;或记录$http_referer和$remote_addr到日志,用于溯源分析


















