下载服务器上有众多的软件资源, 可是很多来源不是本站,是迅雷、flashget, 源源不断的带宽,防盗链绝对是当务之急. 使用来源判断根本不靠谱,只能防止一些小白站点的盗链,迅雷之类的下载工具完全无效,如果你是nginx的话,使用secure link完美解决这个问题,远离迅雷.本文仅用于下载服务器,不适用于图片防盗链.
默认情况下nginx不会安装secure_link模块,需要手动指定,配置参数如下
# ./configure --with-http_secure_link_module \ |
--prefix=/usr/ local /nginx-1.4.2 --with-http_stub_status_module
|
2. 配置nginx:
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;
|
secure_link $arg_st,$arg_e;
|
secure_link_md5 ttlsa.com$uri$arg_e;
|
if ($secure_link = "0" ) {
|
3. php下载页面
# 作用:生成nginx secure link链接
|
$secret = 'ttlsa.com' ; # 密钥
|
$path = '/web/nginx-1.4.2.tar.gz' ; # 下载文件
|
# 下载到期时间,time是当前时间,300表示300秒,也就是说从现在到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防盗链
打开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根据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,不需要额外安装第三方模块,有下载服务器的兄弟,我极力推荐你们使用它,除非你不在乎你的带宽.
文章标题: nginx secure_link下载防盗链
本文地址: http://www.ttlsa.com/nginx/nginx-modules-secure_link/
除非注明,博客文章均为"运维生存时间"原创,转载请标明本文地址,运维圈子期待您的加入(http://bbs.ttlsa.com),