nginx secure_link下載防盜鏈



nginx secure_link下載防盜鏈


下載服務器上有衆多的軟件資源, 可是很多來源不是本站,是迅雷、flashget, 源源不斷的帶寬,防盜鏈絕對是當務之急. 使用來源判斷根本不靠譜,只能防止一些小白站點的盜鏈,迅雷之類的下載工具完全無效,如果你是nginx的話,使用secure link完美解決這個問題,遠離迅雷.本文僅用於下載服務器,不適用於圖片防盜鏈.

安裝nginx

默認情況下nginx不會安裝secure_link模塊,需要手動指定,配置參數如下



 # ./configure --with-http_secure_link_module \

 --prefix=/usr/local/nginx-1.4.2 --with-http_stub_status_module

 # make

 # make install

配置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;

        }

    }

}

 

php下載頁面


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<?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;

 ?>

 

測試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頁面。

secure link 防盜鏈原理

用戶訪問down.php

down.php根據secret密鑰、過期時間、文件uri生成加密串

將加密串與過期時間作爲參數跟到文件下載地址的後面

nginx下載服務器接收到了過期時間,也使用過期時間、配置裏密鑰、文件uri生成加密串

將用戶傳進來的加密串與自己生成的加密串進行對比,一致允許下載,不一致403

整個過程實際上很簡單,類似於用戶密碼驗證. 尤爲注意的一點是大家一定不要泄露了自己的密鑰,否則別人就可以盜鏈了,除了泄露之外最好能經常更新密鑰.

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取代,不在多說.

注意事項

密鑰防止泄露、以及經常更新密鑰

下載服務器和php服務器的時間不能相差太大,否則容易出現文件一直都是過期狀態.

最後

secure link以及內置到了nginx,不需要額外安裝第三方模塊,有下載服務器的兄弟,我極力推薦你們使用它,除非你不在乎你的帶寬.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章