一、安装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 ;
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 ; #资源不存在或哈希比对失败
}
if ($secure_link = "") {
return ; #时间戳过期
}
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

注意事项

 密钥防止泄露、以及经常更新密钥
下载服务器和链接生成的服务器上的时间不能相差太大,否则容易出现文件一直都是过期状态.

使用nginx secure_link指令实现下载防盗链的更多相关文章

  1. nginx secure_link下载防盗链

    下载服务器上有众多的软件资源, 可是很多来源不是本站,是迅雷.flashget, 源源不断的带宽,防盗链绝对是当务之急. 使用来源判断根本不靠谱,只能防止一些小白站点的盗链,迅雷之类的下载工具完全无效 ...

  2. Nginx中防盗链(下载防盗链和图片防盗链)操作记录

    日常运维工作中,设置防盗链的需求会经常碰到,这也是优化网站的一个必要措施.今天在此介绍Nginx中设置下载防盗链和图片防盗链的操作~ 一.Nginx中下载防盗链的操作记录对于一些站点上的下载操作,有很 ...

  3. Nginx中防盗链(下载防盗链和图片防盗链)及图片访问地址操作记录

    日常运维工作中,设置防盗链的需求会经常碰到,这也是优化网站的一个必要措施.今天在此介绍Nginx中设置下载防盗链和图片防盗链的操作~ 一.Nginx中下载防盗链的操作记录对于一些站点上的下载操作,有很 ...

  4. Nginx下载防盗链(迅雷等下载软件)

    什么是下载盗链   假设我们是一个B站,有些视频资源是可以提供给用户下载的.这时迅雷等其他下载软件,也提供下载该视频的服务, 但是迅雷很不厚道的,将我们的下载资源提供给他的用户,下载.占用我们的带宽来 ...

  5. Nginx 十大优化 与 防盗链

    Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器.Ngin ...

  6. Nginx修改配置实现图片防盗链

    一般情况下,防盗链是针对软件下载和图片的,由于一般的站点不提供资源下载,所以本文主要是针对图片的防盗链 1.如果对全站图片做防盗链,至少需要一个另外的域名存放指向图片.因为如果对全站图片做了防盗链,包 ...

  7. SpringBoot集成FastDFS+Nginx整合基于Token的防盗链

    为什么要用SpringBoot? SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人 ...

  8. nginx做反向代理并防盗链

    nginx做反向代理真的非常简单,只需设置location+proxy_pass即可. 防盗链配置有些复杂,需要注意的地方: 在防盗链的location中需要再设置一下proxy_pass(在这里走了 ...

  9. nginx跨站访问,防盗链

    跨站访问 从网站A利用AJAX跨站访问网站B 浏览器会根据服务端返回的头部信息(Access-Control-Allow-Origin)判断是否允许跨域访问.如果服务端都允许跨站访问,浏览器段也就没必 ...

随机推荐

  1. python之路---10 *args **kwargs 命名空间 作用域 函数的嵌套

    二十八.函数进阶 1.   "*"  和  "**" ① 在形参位置时   都是聚合的作用 *args    位置参数→元组 **kwargs   关键字参数→ ...

  2. [转]Java NIO通俗易懂简明教程

    Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API.本系列教程将有助于你学习和理解Java NIO. Java NIO提供了与 ...

  3. MySQL 中的反引号(`):是为了区分 MySql 关键字与普通字符而引入的符号;一般,表名与字段名都使用反引号。

    MySQL 中的反引号(`):是为了区分 MySql 关键字与普通字符而引入的符号:一般,表名与字段名都使用反引号.

  4. JavaScript 隐式类型转换之:加号+

    加号+,有些情况下,它是算术加号,有些情况下,是字符串连接符号 如果字符串和数字相加,JavaScript会自动把数字转换成字符,不管数字在前还是字符串在前 "2" + 3; // ...

  5. dependencies、devDependencies、webpack打包 的区别与联系

    为什么要在dependencies.devDependencies中声明依赖? 答:保证任何人在(或者你自己在其他设备上)对这个项目进行修改(开发)时,通过npm install就能获取同样的开发环境 ...

  6. js获取上传图片大小,判断上传图片类型,获取图片真实宽度和高度

    html部分 <div class="form-group col-md-12"> <label class="col-md-2 text-right& ...

  7. Mysql 通信协议抓包分析

    mysql在传输层使用的TCP协议.一个TCP payload可能有多个mysql packet.如下图所示. TCP head TCP payload (mysql packet1, mysql p ...

  8. Flume 多个agent串联

    多个agent串联 采集需求:比如业务系统使用log4j生成的日志,日志内容不断增加,需要把追加到日志文件中的数据实时采集到hdfs,使用agent串联 根据需求,首先定义以下3大要素 第一台flum ...

  9. RedHat6.5安装单机flume1.6

    版本号: RedHat6.5   JDK1.8   apache-flume-1.6.0 1.apache-flume-1.6.0-bin.tar.gz 下载 官网下载地址:http://archiv ...

  10. 通过Hibernate API编写访问数据库的代码

    private Configuration config;// 1.声明私有配置对象类private ServiceRegistry serviceRegistry;// 2.声明私有服务注册对象类p ...