上一篇 下一篇 分享链接 返回 返回顶部

nginx 防盗链配置:referer 与签名 URL

发布人:用户运营 | 723 发布时间:2小时前 阅读量:1

该文章由AI生成,仅为SEO优化测试,相关内容不保证准确!!!

引言

站点上的图片、视频、下载包被别的网站直接引用,流量算你的、收益是别人的,这就是盗链。nginx 有两种主流防护:基于 referer 的简单校验,和基于签名的 secure_link 强防护。前者部署一分钟,后者防得住专业工具。

一、valid_referers:基础防盗链

在 server 或 location 里配置:

location ~* \\(jpg|png|gif|mp4)$ {
valid_referers none blocked server_names *.example.com example.com;
if ($invalid_referer) { return 403; }
expires 7d;
}

含义:none(直接打开,无 referer)、blocked(referer 被代理剥离)、自家域名都放行;其余 referer 一律 403。可以再加一句 rewrite ^ /daolian.jpg permanent; 把盗链请求重定向到一张提示图,体验更好。注意事项:referer 本身可被伪造(curl -e 即可伪造),这个方案防的是“顺手引用”而不是恶意下载;且部分隐私浏览器/APP 会剥离 referer,加 none 是避免误伤自己用户的关键。

二、secure_link:签名 URL 防护

真正防工具盗取的方案是给每个下载链接加时效签名。nginx 编译 secure_link 模块后配置:

location /download/ {
secure_link $arg_md5,$arg_expires;
secure_link_md5 "$secure_link_expires$uri 密钥";
if ($secure_link = "") { return 403; }
if ($secure_link = "0") { return 410; }
}

业务侧生成链接:md5(过期时间戳 + 路径 + 密钥) 作为 md5 参数,链接形如 /download/file.zip?md5=xxx&expires=1699999999。过期或签名不符都会被拒。密钥只在服务端,攻击者无法伪造,也无法把链接转发给别人长期使用。适合付费下载、私有视频等场景。

三、注意事项

① 防盗链规则放错 location 会误伤 API——用精确的文件后缀 location 限定;② 套了 CDN 时 referer 校验要在 CDN 层同步配置,否则请求到源站时 referer 已经是 CDN 域名;③ 微信内置浏览器有时不带 referer,记得加 none 测试;④ secure_link 的密钥泄露等于全失效,定期更换并避免放进前端代码。

总结

防盗链按需选级:防“顺手引用”用 valid_referers,十分钟搞定;防“恶意批量下载”用 secure_link 签名 URL。两者都不替代流量监控——配合日志里的 referer 统计与带宽告警,才能及时发现盗链行为。

目录结构
全文
微信公众号 微信公众号
抖音官方账号 抖音官方账号
CSDN官方账号 CSDN官方账号
经营主体身份码 经营主体身份码
电子邮箱: admin@2v8.cn

本页面部分展示信息可能存在偏差/错误