• Nginx防盗链


    资源盗链

    资源盗链指的是此内容不在自己服务器上,而是通过技术手段,绕过别人的限制将别人的内容放到自己页面上最终展示给用户。以此来盗取大网站的空间和流量。简而言之就是用别人的东西成就自己的网站。

    • 案例
    1. 创建steal.html,页面引用两张图片
    <html>
      <head>
      	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      head>
      <body>
        <h1>郁金香h1>
        <img src="https://www.w3school.com.cn/i/eg_tulip.jpg"  alt="上海鲜花港 - 郁金香" />
        <h1>百度CARh1>
        <img src="https://pics7.baidu.com/feed/cf1b9d16fdfaaf516f7e2011a7cda1e8f11f7a1a.jpeg?token=551979a23a0995e5e5279b8fa1a48b34&s=BD385394D2E963072FD48543030030BB"  alt="百度CAR" />
      body>
    html>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    1. 配置Nginx服务
    server{
      listen  80;
      server_name localhost;
      location /{
        root html;
        index steal.html;
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. 访问http://172.41.100.15/

    可以看出来,下面的图片地址添加了防止盗链的功能,上面的图片可以直接使用。
    在这里插入图片描述

    Nginx防盗链的实现原理

    当浏览器向web服务器发送请求的时候,一般都会带上**Referer**,来告诉浏览器该网页是从哪个页面链接过来的,后台服务器可以根据获取到的这个**Referer**信息来判断是否为自己信任的网站地址,如果是则放行继续访问,如果不是则可以返回403(服务端拒绝访问)的状态信息。
    在这里插入图片描述

    • 模拟盗链场景

    在这里插入图片描述

    • Nginx防盗链的具体实现

    valid_referers: nginx会通就过查看referer自动和valid_referers后面的内容进行匹配,如果匹配到了就将 i n v a l i d r e f e r e r 变 量 置 0 , 如 果 没 有 匹 配 到 , 则 将 invalid_referer变量置0,如果没有匹配到,则将 invalidreferer0invalid_referer变量置为1,匹配的过程中不区分大小写

    语法valid_referers none|blocked|server_names|string…
    默认值
    位置server、location
    1. none: 如果Header中的Referer为空,允许访问
    2. blocked:在Header中的Referer不为空,但是该值被防火墙或代理进行伪装过,如不带"http://" 、"https://"等协议头的资源允许访问。
    3. server_names:指定具体的域名或者IP
    4. string: 可以支持正则表达式和*的字符串。如果是正则表达式,需要以~开头表示
    • 案例
    location ~*\.(png|jpg|gif){
      valid_referers none blocked www.baidu.com 192.168.200.222 *.example.com example.*  www.example.org  ~\.google\.;
      if ($invalid_referer){
        return 403;
      }
      root /usr/local/nginx/html;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    针对目录进行防盗链

    location /images {
      valid_referers none blocked www.baidu.com 192.168.200.222 *.example.com example.*  www.example.org  ~\.google\.;
      if ($invalid_referer){
        return 403;
      }
      root /usr/local/nginx/html;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 安装第三方防盗链模块
    1. 下载nginx-accesskey源码

    git clone ``[https://github.com.cnpmjs.org/darren2025/nginx-accesskey.git](https://github.com.cnpmjs.org/darren2025/nginx-accesskey.git)

    1. 升级Nginx

    ./configure --prefix=/home/nginx --with-http_gzip_static_module --with-http_gzip_static_module ``**--add-module**``=/home/nginx-accesskey
    **--add-module****

    • 案例
    1. Nignx配置
    #172.41.100.14 Nginx配置
    server{
     listen 9088;
     server_name localhost;
     location /images {
        accesskey             on; #功能开启
        accesskey_hashmethod  md5; #加密方式
        accesskey_arg         sign; #参数名称
        accesskey_signature   "mypass$remote_addr"; #参数
        root /usr/local/nginx/html;
     }
    }
    
    #172.41.100.15 Nginx配置
    server{
      listen  80;
      server_name localhost;
      location /{
        root html;
        index steal.html;
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    1. steal.htm配置
    <html>
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    head>
      <body>
        <h1>172.41.100.14h1>
        <img src="http://172.41.100.14:9088/images/1.jpg"  alt="tom" />
      body>
    html>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    1. 访问172.41.100.15
      在这里插入图片描述

    2. 直接访问172.41.100.14
      在这里插入图片描述

    3. 按照172.41.100.14的配置规则传递参数

    参数名称为sign,参数值为mypass+客户端ip生成md5加密串
    在这里插入图片描述

    1. 带参数访问效果

    在这里插入图片描述

  • 相关阅读:
    ArcGIS中ArcMap栅格遥感影像的监督分类
    基于两种算法的无线信道“指纹”特征识别(Matlab代码实现)
    Kubernetes Prometheus 监控 Nginx
    conda创建环境、安装包到环境迁移
    【李宏毅 | 深度学习】自注意力机制(Self-attention)
    01-微服务探讨(摘)
    数组的子集能否累加出K
    Alibaba/IOC-golang 正式开源 ——打造服务于go开发者的IOC框架
    Unity 脚本中创建的游戏对象
    QT: QChart柱状图和曲线图实现
  • 原文地址:https://blog.csdn.net/u010859650/article/details/127899029