前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx web 资源防盗链学习笔记

Nginx web 资源防盗链学习笔记

作者头像
泥豆芽儿 MT
发布2018-09-11 11:28:07
6260
发布2018-09-11 11:28:07
举报

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1333770

背景

  • 今天,浏览了 Nginx Web 资源防盗链的知识,在此做下笔记,当然,毕竟网上的介绍已经很是详细,重要的是在自己配置的过程,难免会有所偏差
  • 对于这一知识点的学习还是很有必要的,文中摘取整理了好多网上资源,个人觉得难点是在已配置 Nginx 的前提下对扩展的添加实现
  • 赘述一点,多参考前辈的介绍,根据错误进行排查,才能有更好的进步,祝你顺利…

【一】概念

(1).何为盗链

代码语言:javascript
复制
客户端向服务器请求资源时,
为了减少网络带宽,提高响应时间,服务器一般不会一次将所有资源完整地传回给客户端。
比如在请求一个网页时,首先会传回该网页的文本内容,
当客户端浏览器在解析文本的过程中发现有图片存在时,
会再次向服务器发起对该图片资源的请求,服务器将存储的图片资源再发送给客户端。
在这个过程中,
如果该服务器上只包含了网页的文本内容,
并没有存储相关的图片资源,而是将图片资源链接到其他站点的服务器上去了,
这就形成了盗链行为

(2).防盗链原理

代码语言:javascript
复制
http 标准协议中有专门的字段记录 referer
一来可以追溯上一个入站地址是什么
二来对于资源文件,可以跟踪到包含显示他的网页地址是什么
因此所有防盗链方法都是基于这个 Referer 字段

【二】笔记

【三】重点

(1). valid_referer 的使用

①. valid_referer 指令的语法结构:

代码语言:javascript
复制
valid_referers none | blocked | server_names | string ....;
none 检测 Referer 头域不存在的请求
blocked 检测 Referer 头域的值被防火墙或者代理服务器删除或伪装的情况。
这种情况下,该头域的值不以 “http://” 或者 “https://” 开头
server_names 设置一个或多个 URL ,检测 Referer 头域的值是否是这些 URL 中的某个。
从 nginx 0.5.33 以后支持使用通配符 “*” 。

②. 配置格式 nginx.conf

代码语言:javascript
复制
location ~* \.(gif|jpg|png|flv|swf|rar|zip|webp)$
        {
            valid_referers none blocked imuzxx.com *.imuzxx.com server_names ~\.google\. ~\.baidu\.;
            if ($invalid_referer) {
            return 403;
            #rewrite ^/ http://www.baidu.com/403.jpg;
        }

③. 提示:

  • 使用前,要求已经安装了此扩展模块
  • 对于 referer 的实现,如果盗链的网站通过伪造来路的 http 请求时不能屏蔽

④. 使用演示:

  • 配置文件修改前:
  • 配置文件添加内容:
  • 进行 nginx 重启,建议清除浏览器缓存后演示,修改后的界面显示:

(2). accesskey 使用

①. 配置格式 nginx.conf

代码语言:javascript
复制
location /download {
  accesskey on;
  accesskey_hashmethod md5;
  accesskey_arg "sign";
  accesskey_signature "signtip$remote_addr";
}

  • 释义:
代码语言:txt
复制
- accesskey 为模块开关; 
- accesskey\_hashmethod 为加密方式 MD5 或者 SHA-1; 
- accesskey\_arg 为 url 中的关键字参数; 
- accesskey\_signature 为加密值,此处为 mypass 和访问 IP 构成的字符串。 

②. 测试脚本举例

代码语言:javascript
复制
<?php
            $sign= md5("signtip".$_SERVER['REMOTE_ADDR']);
            $output_sign = "<a href=http://imuzxx.com/public/wozzxxLM.rar?sign="
                   .$sign.">download_add_key</a><br />";
            $output_nosign="<a href=http://imuzxx.com/public/wozzxxLM.rar>download_org_path</a><br />";
            echo $output_sign;
            echo $output_nosign;
        ?>
  • 图片的访问链接类似
代码语言:javascript
复制
 http://imuzxx.com/download/hello.zip?sign=edsds2324sdf234

④. 提示

  • 使用前,要求已经安装了此扩展模块
  • 一个可供下载的 accesskey 扩展包文件 本人测试环境没有通过,可能是自己操作的问题。

推荐文章

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年11月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 【一】概念
    • (1).何为盗链
      • (2).防盗链原理
      • 【二】笔记
      • 【三】重点
        • (1). valid_referer 的使用
          • ①. valid_referer 指令的语法结构:
          • ②. 配置格式 nginx.conf
          • ③. 提示:
          • ④. 使用演示:
        • (2). accesskey 使用
          • ①. 配置格式 nginx.conf
          • ②. 测试脚本举例
          • ④. 提示
      • 推荐文章
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档