使用nginx secure_link指令實現下載防盜鏈


一、安裝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 80; 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 403;  #資源不存在或哈希比對失敗 } if ($secure_link = "0") { return 403;  #時間戳過期 } 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

注意事項

1 密鑰防止泄露、以及經常更新密鑰 2 下載服務器和鏈接生成的服務器上的時間不能相差太大,否則容易出現文件一直都是過期狀態.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM