zoukankan      html  css  js  c++  java
  • Nginx防盗链

    为什么要配置防盗链

    • A是某一网站站长,A网站中的图片和音频视频链接等静态资源都保存在对象存储OSS上或者本地。

    • B是另一网站的站长,B在未经A允许的情况下使用A网站的图片资源,放置在自己网站的网页中,通过这种方法盗取空间和流量。这样的情况下,第三方网站用户看到的是B网站,但并不清楚网站里的图片来源。

    • OSS是收费的,这样用户A在没有获取任何收益的情况下,反而承担了资源使用费用,并且B在没有经过允许的情况下适用这些资源也是侵害了A的合法权益。

    综上,为了防止B这一类人的不法侵害,需要使用防盗链进行防护

    配置防盗链的方法

    要实现防盗链,需要了解HTTP协议中的请求头部的Referer头域和采用URL的格式表示访问当前网页或者文件的源地址。通过该头域的值,我们可以检测到访问目标资源的源地址。这样,如果我们检测到Referer头域中的值并不是自己站点内的URL,就采取阻止措施,实现防盗链。

    Nginx的valid_referers可以配置相关防盗链的行为

    **Syntax:   valid_referers none | blocked | server_names | string ...;
    Default:    —
    Context:    server, location
    #搜索匹配不区分大小写
    
    Parameters can be as follows:
    none                #检测Referer头域不存在的请求
    blocked             #检测Referer头域的值被防火墙或者代理服务器删除或伪装的情况,这种情况头域不以http:// https:// 开头
    server_names        #设置一个或多个URL,检测Referer头域的值是否是这些URL中的某个
    arbitrary string    #定义一个服务器名称和一个可选的URI前缀。服务器名可以在开头或结尾有“*”。检查时,“Referer”字段中的服务器端口被忽略

    这些语法含义指的是,valid_referers配置白名单对请求的头域进行匹配,匹配的值就是$invalid_referer,根据获得的这个值,进行if条件判断,然后进行rewrite。

    示例

    #匹配文件类型
    location ~* .(gif|jpg|png|jpeg|flv|swf|rar|zip)$ {
        expires     30d;
    #允许文件链出的域名白名单,域名之间空格隔开
        valid_referers none blocke *.A.com www.A.com;
    #if判断为真
    if ($invalid_referer) {
    #防盗链图片替换所有盗链图片
        rewrite ^/ http://www.A.com/404.jpg;
        }
    }
    • 为了彻底实现真正的防盗链,可以将none、blocked删除
    • 防盗链返回图片可以rewrite成图片,也可以是链接

    完成防盗链配置,可以在请求头里面看到Host头的指向,会只看到A.com。

  • 相关阅读:
    浏览器缓存
    FLINK --- 写HDFS
    ArrayList 线程不安全
    rocketMQ源码之 似乎并不能严格进行顺序消费
    报错 Aray size is not a small enough positive integer 的解决方案
    什么是函数的柯里化?
    props, state与render函数关系 – 数据和页面是如何实现互相联动的?
    【自我管理】my schedule
    【解题报告】洛谷P1219 八皇后
    【解题报告】洛谷P1433 吃奶酪
  • 原文地址:https://www.cnblogs.com/qichao123/p/11641197.html
Copyright © 2011-2022 走看看