用Nginx打造防盗链护盾

用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:为什么我配置后自己网站也显示不了?

✅ 检查清单:

  1. 白名单是否包含自己域名
  2. 是否漏掉了blockednone
  3. 测试时是否使用了隐身模式(无referer)

💡 小贴士:防盗链就像给自家花园装上围栏——
既不能让邻居随便摘花,也要给真正的客人留好入口。
定期检查日志,保持策略更新,才能让盗链者无机可乘!

动手时间:现在就打开你的Nginx配置,试试这些技巧吧!遇到问题欢迎在评论区讨论~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_42587823

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值