nginx secure_link下载防盗链

下载服务器上有众多的软件资源, 但是不少来源不是本站,是迅雷、flashget, 源源不断的带宽,防盗链绝对是当务之急. 使用来源判断根本不靠谱,只能防止一些小白站点的盗链,迅雷之类的下载工具彻底无效,若是你是nginx的话,使用secure link完美解决这个问题,远离迅雷.本文仅用于下载服务器,不适用于图片防盗链. php

1. 安装nginx
默认状况下nginx不会安装secure_link模块,须要手动指定,配置参数以下 html

# ./configure --with-http_secure_link_module \
 --prefix=/usr/local/nginx-1.4.2 --with-http_stub_status_module
 # make
 # make install

2. 配置nginx: nginx

server {

    listen       80;
    server_name  s1.down.ttlsa.com;
    access_log  /data/logs/nginx/s1.down.ttlsa.com.access.log  main;

    index index.html index.php index.html;
    root /data/site/s1.down.ttlsa.com;

    location / {
        secure_link $arg_st,$arg_e;
        secure_link_md5 ttlsa.com$uri$arg_e;

        if ($secure_link = "") {
            return 403;
        }

        if ($secure_link = "0") {
            return 403;
        }
    }
}

 

3.  php下载页面 web

<?php
 # 做用:生成nginx secure link连接
 # 站点:www.ttlsa.com
 # 做者:凉白开
 # 时间:2013-09-11
$secret = 'ttlsa.com'; # 密钥
 $path = '/web/nginx-1.4.2.tar.gz'; # 下载文件
 # 下载到期时间,time是当前时间,300表示300秒,也就是说从如今到300秒以内文件不过时
 $expire = time()+300;
# 用文件路径、密钥、过时时间生成加密串
 $md5 = base64_encode(md5($secret . $path . $expire, true));
 $md5 = strtr($md5, '+/', '-_');
 $md5 = str_replace('=', '', $md5);
# 加密后的下载地址
 echo '<a href=http://s1.down.ttlsa.com/web/nginx-1.4.2.tar.gz?st='.$md5.'&e='.$expire.'>nginx-1.4.2</a>';
 echo '<br>http://s1.down.ttlsa.com/web/nginx-1.4.2.tar.gz?st='.$md5.'&e='.$expire;
 ?>

 

4.  测试nginx防盗链 bash

打开http://test.ttlsa.com/down.php点击上面的链接下载
下载地址以下:
http://s1.down.ttlsa.com/web/nginx-1.4.2.tar.gz?st=LSVzmZllg68AJaBmeK3E8Q&e=1378881984
页面不要刷新,等到5分钟后在下载一次,你会发现点击下载会跳转到403页面。 服务器

5.  secure link 防盗链原理 运维

  • 用户访问down.php
  • down.php根据secret密钥、过时时间、文件uri生成加密串
  • 将加密串与过时时间做为参数跟到文件下载地址的后面
  • nginx下载服务器接收到了过时时间,也使用过时时间、配置里密钥、文件uri生成加密串
  • 将用户传进来的加密串与本身生成的加密串进行对比,一致容许下载,不一致403

整个过程实际上很简单,相似于用户密码验证. 尤其注意的一点是你们必定不要泄露了本身的密钥,不然别人就能够盗链了,除了泄露以外最好能常常更新密钥. 工具

5.  secure link 指令 测试

secure_link
语法: secure_link md5_hash[,expiration_time]
默认: none
配置段: location
variables: yes 网站

这个指令由uri中的MD5哈希值和过时时间组成. md5哈希必须由base64加密的,过时时间为unix时间.若是不加过时时间,那么这个链接永远都不会过时.

secure_link_md5
语法: secure_link_md5 secret_token_concatenated_with_protected_uri
默认: none
配置段: location
variables: yes
md5值对比结果,使用上面提供的uri、密钥、过时时间生成md5哈希值.若是它生成的md5哈希值与用户提交过来的哈希值一致,那么这个变量的值为1,不然为0

secure_link_secret
语法:     secure_link_secret word
默认:
配置段:     location
Reference:    secure_link_secret
nginx 0.8.50以后的版本已经使用secure_link_md5取代,不在多说.

6. 注意事项

  • 密钥防止泄露、以及常常更新密钥
  • 下载服务器和php服务器的时间不能相差太大,不然容易出现文件一直都是过时状态.

7.  最后

secure link以及内置到了nginx,不须要额外安装第三方模块,有下载服务器的兄弟,我极力推荐大家使用它,除非你不在意你的带宽.

来源网站:运维生存时间  网址:http://www.ttlsa.com/html/2926.html

相关文章
相关标签/搜索