美文网首页
nginx 防盗链配置

nginx 防盗链配置

作者: JJNile | 来源:发表于2019-05-30 23:27 被阅读0次

    为了防止资源给盗用,从而给我们的所在服务器造成额外的负担,需要采取防盗链的措施。

    使用 nginx 模块ngx_http_referer_module 来阻挡来源非法的域名请求,以下我们利用 referer 指令实现防盗链。

    文件类型防盗链

    # 需要防盗的后缀
    location ~* \.(jpg|jpeg|png|gif|bmp|swf|rar|zip|doc|xls|pdf|gz|bz2|mp3|mp4|flv)$
        #设置过期时间
        expires     30d;
        # valid_referers 就是白名单的意思
        # 支持域名或ip
        # 允许ip 192.168.0.1 的请求
        # 允许域名 *.google.com 所有子域名
        valid_referers none blocked 192.168.0.1 *.google.com;
        if ($invalid_referer) {
            # return 403;
            # 盗链返回的图片,替换盗链网站所有盗链的图片
            rewrite ^/ https://site.com/403.jpg;
        }
        root  /usr/share/nginx/img;
    }
    

    以上配置主要看 valid_referers,这个变量代表只允许网址访问,上面配置中允许 IP 为 192.168.0.1 和 Google 搜索引擎访问图片该服务下的资源,否则就重定向到一张默认图片

    valid_referers 参数说明

    valid_referers    none | blocked | server_names | string …;
    
    none:缺少“Referer”请求头;
    
    blocked:“Referer” 请求头存在,但是它的值被防火墙或者代理服务器删除。这些值都不以“http://” 或者 “https://”字符串作为开头;
    
    server_names:“Referer” 请求头包含某个虚拟主机名;
    
    任意字符串:定义一个服务器名和可选的URI前缀。服务器名允许在开头或结尾使用“*”符号。当nginx检查时,“Referer”请求头里的服务器端口将被忽略;
    
    正则表达式:必须以“~”符号作为开头。 需要注意的是表达式会从“http://”或者“https://”之后的文本开始匹配;
    

    如果不允许通过文件直链进行访问和下载,只能在限定的域名中引用和下载,删除valid_referers这行代码中的noneblocked这两个值即可。

    指定目录防盗链

    location /images/ { 
      alias /data/images/; 
      valid_referers none blocked server_names *.moewah.com *.mao.sh ; 
      if ($invalid_referer) {return 403;} 
    } 
    

    伪造 Referer 的请求很容易实现,所以这种方法无法真正阻止有心的盗链

    参考

    https://www.moewah.com/archives/898.html

    相关文章

      网友评论

          本文标题:nginx 防盗链配置

          本文链接:https://www.haomeiwen.com/subject/alqitctx.html