zoukankan      html  css  js  c++  java
  • 使用nginx secure_link指令实现下载防盗链

    一、安装nginx并检查是否已安装模块

    [root@img_server ~]# nginx -V #输出nginx所有已安装模块,检查是否有ngx_http_secure_link_module

    二、配置nginx

    [root@img_server ~]# vim /etc/nginx/conf.d/dowm_img_safe.conf 
    server {
            listen       80;
            server_name  img_server;
            root         /usr/share/nginx/html/;
    
        location / {
            secure_link $arg_md5,$arg_expires;  #这里配置了2个参数一个是arg_md5,一个是arg_expires
            secure_link_md5 "$secure_link_expires$uri secret_key"; #secret_key为自定义的加密串   
        if ($secure_link = "") {
            return 403;       #资源不存在或哈希比对失败
            }
        if ($secure_link = "0") {
            return 403;      #时间戳过期 
            }
          if ($request_filename ~* ^.*?.(jpg)$){
            add_header Content-Disposition attachment;  #不浏览,直接下载
    }
            }
    
            }

    三、使用shell脚本生成下载的链接(生产环境由开发在代码中实现)

    [root@img_server html]# cat md5url.sh 
    #!/bin/bash
    servername="img_server"  #服务器的域名
    download_file="/test.jpg" #测试下载文件的uri
    time_num=$(date -d "+300 seconds" +%s) #定义过期时间为300秒
    secret_num="secret_key" #自定义的加密串,和nginx的配置文件中加密串相同
    res=$(echo -n "${time_num}${download_file} ${secret_num}"|openssl md5 -binary|openssl base64|tr +/ -_|tr -d =)  #生成MD5值
    echo "http://${servername}${download_file}?md5=${res}&expires=${time_num}" #打印下载链接

    四、测试

    [root@img_server html]# chmod +x md5url.sh  #添加权限
    [root@img_server html]# systemctl start nginx #启动服务
    [root@img_server html]# wget http://pic17.huitu.com/res/20140314/526868_20140314230121822200_1.jpg
    [root@img_server html]# mv 526868_20140314230121822200_1.jpg test.jpg #下载一个图片,并命名为test.jpg

    1.测试直接访问(测试机器需要添加域名解析)

    访问结果为403

    2.使用生成的下载链接进行访问

    [root@img_server html]# sh md5url.sh 
    http://img_server/test.jpg?md5=oa63dd5x_yi_E_eJLsAhHQ&expires=1523007651

    过五分钟(即脚本中300秒)再次访问,返回410

    注意事项

    1 密钥防止泄露、以及经常更新密钥
    2 下载服务器和链接生成的服务器上的时间不能相差太大,否则容易出现文件一直都是过期状态.
  • 相关阅读:
    删除XML文档中某节点
    水晶报表之创建子报表
    给字符串中的每个字符加上单引号
    Failed to export using the options you specified. Please check your options and try again
    从ASP.NET传递参数给水晶报表
    两个文本框异动任何一个能即时更新计算结果
    添加节点至XML文档中去
    读取XML文档存入泛型List<T>集合中
    泛型List<T>转存为XML文档
    怎样创建XML文档
  • 原文地址:https://www.cnblogs.com/panwenbin-logs/p/8728327.html
Copyright © 2011-2022 走看看