用Nginx打造防盗链护盾
一、你的网站正在"为他人做嫁衣"?
想象一下这个场景:
你精心拍摄的摄影作品、录制的课程视频、设计的原创素材,被其他网站直接盗用链接。
更气人的是——当用户在他们网站查看这些资源时,消耗的却是你的服务器流量!
🛑 这就像你花钱买的零食,却被邻居家小孩随便拿去招待客人!
二、防盗链背后的"侦察兵"——$http_referer
1. 这个变量为什么叫错别字?
Nginx内置变量$http_referer
(注意是referer不是referrer)就像网络世界的"邀请函":
- 当用户通过A网站点击链接访问你的资源时
- 浏览器会自动在请求头里带上
Referer: A网站的地址
- Nginx通过这个变量就能知道请求是从哪来的
2. 为什么不能完全依赖它?
- 可以被伪造(就像假身份证)
- 隐私模式下访问时不会携带
- 直接输入地址访问时值为空
三、三步搭建防盗链系统
步骤1:基础防护——白名单机制
location ~* \.(jpg|png|mp4)$ {valid_referers none blocked *.yourdomain.com ~.google. ~.baidu.;if ($invalid_referer) {return 403;# 或者替换成提示图片# rewrite ^ /static/anti-leech.jpg;}
}
配置解读:
none
:允许直接访问(地址栏输入)blocked
:允许去掉http://
前缀的访问*.yourdomain.com
:主站及其子域名~.google.
:允许来自Google的搜索引擎流量(正则匹配)
步骤2:高级技巧——动态防盗链
location /assets/ {# 生成加密签名(示例逻辑)set $secret_key "your_private_key";set_hmac_sha1 $signature $secret_key $uri;# 验证URL中的签名参数if ($arg_sign != $signature) {return 403;}
}
访问合法URL示例:
/assets/cat.jpg?sign=7d8f9e0a1b2c3d4e5f
(签名需后端生成)
四、你可能遇到的灵魂拷问
Q1:为什么我配置后自己网站也显示不了?
✅ 检查清单:
- 白名单是否包含自己域名
- 是否漏掉了
blocked
和none
- 测试时是否使用了隐身模式(无referer)
💡 小贴士:防盗链就像给自家花园装上围栏——
既不能让邻居随便摘花,也要给真正的客人留好入口。
定期检查日志,保持策略更新,才能让盗链者无机可乘!
动手时间:现在就打开你的Nginx配置,试试这些技巧吧!遇到问题欢迎在评论区讨论~