一、安裝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 下載服務器和鏈接生成的服務器上的時間不能相差太大,否則容易出現文件一直都是過期狀態.