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。

  • 相关阅读:
    Android ActivityGroup的使用代码将子activty 的layout加入到主activity中
    ERROR: Application requires API version 10. Device API version is 8
    简单实现Android实现九宫格
    继承中new 与 override的作用
    Sql server 数量累计求和
    Android 应用程序窗体显示状态操作(requestWindowFeature()的应用)
    UDP传输错误 无法找到程序集“client, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
    堆与栈的区别
    Decorator模式
    时间为O(1)删除节点的代码
  • 原文地址:https://www.cnblogs.com/qichao123/p/11641197.html
Copyright © 2011-2022 走看看