nginx可通过valid_referers配合if($invalid_referer)限制视频盗链,需先定义视频后缀或路径,设置referer白名单(none、blocked、域名等),再拦截非法请求并返回403、占位图或空响应;但referer可伪造,高价值视频应结合secure_link签名验证。

直接用 Nginx 的 valid_referers 配合 if ($invalid_referer) 就能有效限制外部调用视频文件,核心是只放行你认可的来源,其余一律拦截。
明确要保护的视频类型
先确定哪些后缀属于你的视频资源,常见如:.mp4、.mov、.avi、.mkv、.webm、.flv。配置时用正则匹配,比如:
location ~* \.(mp4|mov|avi|mkv|webm|flv)$- 建议加上
~*实现大小写不敏感匹配(如 .MP4 也能被识别) - 如果视频集中在某个路径下(如
/videos/),可改用location /videos/更精准
设置合法 Referer 白名单
在对应 location 块内添加 valid_referers 指令,定义哪些来源算“自己人”:
-
none:允许直接在浏览器地址栏输入 URL 访问(比如用户分享链接) -
blocked:允许 Referer 被代理或隐私模式清空的情况(避免误杀) -
yourdomain.com:主域名(不含 www) -
*.yourdomain.com:所有子域名(如 player.yourdomain.com、app.yourdomain.com) - 如需合作方嵌入,可追加
partner-site.com *.partner-site.com
拦截非法请求并返回合理响应
检测到非白名单来源后,别只 return 403——对视频资源更推荐以下方式:
- 返回 403 错误:简单直接,适合后台接口或管理类视频
-
重定向到提示图或页面:比如
rewrite ^/.* /nohotlink.mp4?reason=forbidden last;,再配一个 location 处理该路径,返回一张带版权水印的占位图 - 返回空响应或极小文件:避免暴露真实资源结构,减少带宽浪费
注意 Referer 的局限性与补充建议
Referer 可被浏览器禁用或手动伪造,所以它防的是普通盗链,不是高级攻击:
- 不要依赖 Referer 保护高价值付费视频,应结合
secure_link模块做签名验证(含时效+密钥) - 移动端 WebView 或某些 APP 内嵌页可能不带 Referer,测试时需用真实环境验证
- 开启 CORS 时,
Access-Control-Allow-Origin与防盗链逻辑要协调,避免冲突











