使用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 下载服务器和链接生成的服务器上的时间不能相差太大,否则容易出现文件一直都是过期状态.

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM