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

相關文章
相關標籤/搜索