Nginx防盜鏈

一:針對不一樣的文件類型

location ~* \.(gif|jpg|png|swf|flv)$ { 
  valid_referers none blocked www.jzxue.com jzxue.com ; 
  if ($invalid_referer) { 
    rewrite ^/ http://www.jzxue.com/retrun.html; 
    #return 403; 
  } 
php


第一行:gif|jpg|png|swf|flv 
表示對gif、jpg、png、swf、flv後綴的文件實行防盜鏈 
第二行: 表示對www.ingnix.com這2個來路進行判斷 
if{}裏面內容的意思是,若是來路不是指定來思是,若是來路不是指定來路就跳轉到http://www.jzxue.com/retrun.html頁面,固然直接返回403也是能夠的。html

 

二:針對不一樣的目錄

location /images/ { 
alias /data/images/; 
valid_referers none blocked server_names *.xok.la xok.la ; 
if ($invalid_referer) {nginx

return 403;服務器


yii

三:第三方模塊(推薦)

nginx 的第三方模塊ngx_http_accesskey_module 來實現下載文件的防盜鏈測試

 

安裝Nginx和nginx-http-access模塊網站

 

#tar zxvf nginx-0.7.61.tar.gz
#cd nginx-0.7.61/
#tar xvfz nginx-accesskey-2.0.3.tar.gz
#cd nginx-accesskey-2.0.3
#vi config
#把HTTP_MODULES="$HTTP_MODULES $HTTP_ACCESSKEY_MODULE"
#修改爲HTTP_MODULES="$HTTP_MODULESngx_http_accesskey_module
#(這是此模塊的一個bug)
#./configure --user=www --group=www \
--prefix=/usr/local/nginx --with-http_stub_status_module \
--with-http_ssl_module --add-module=/root/nginx-accesskey-2.0.3
server{
.....
location /download {
accesskey             on;
accesskey_hashmethod  md5;
accesskey_arg         "key";
accesskey_signature   "mypass$remote_addr";
}
}加密

 

/download 爲你下載的目錄。url

前臺php產生的下載路徑格式是:spa

1.http://*****.com/download/1.zip?key=<?php echo md5('mypass'.$_SERVER["REMOTE_ADDR"]);?>
這樣,當訪問沒有跟參數同樣時,其餘用戶打開時,就出現:403

NginxHttpAccessKeyModule第三方模塊,實現方法以下:

1.下載Nginx HttpAccessKeyModule模塊文件:Nginx-accesskey-2.0.3.tar.gz;

2.解壓此文件後,找到nginx-accesskey-2.0.3下的config文件。編輯此文件:替換其中的"$HTTP_ACCESSKEY_MODULE"爲"ngx_http_accesskey_module";

3.用一下參數從新編譯nginx:

./configure --add-module=path/to/nginx-accesskey

4.修改nginx的conf文件,添加如下幾行:

location /download {

accesskey       on;

accesskey_hashmethod md5;

accesskey_arg     "key";

accesskey_signature  "mypass$remote_addr";

}

其中:
accesskey爲模塊開關;
accesskey_hashmethod爲加密方式MD5或者SHA-1;
accesskey_arg爲url中的關鍵字參數;
accesskey_signature爲加密值,此處爲mypass和訪問IP構成的字符串。

訪問測試腳本download.php:

<?php

$ipkey= md5("mypass".$_SERVER['REMOTE_ADDR']);

$output_add_key="<a href=http://www.example.cn/download/G3200507120520LM.rar?key=".$ipkey.">

download_add_key</a>";

$output_org_url="<a href=http://www.example.cn/download

/G3200507120520LM.rar>download_org_path</a>";

echo$output_add_key;

echo$output_org_url;

?>

 

訪問第一個download_add_key連接能夠正常下載,第二個連接download_org_path會返回403 Forbidden錯誤。

若是不怕麻煩,有條件實現的話,推薦使用Nginx HttpAccessKeyModule這個東西。

他的運行方式是:如個人download 目錄下有一個 file.zip 的文件。對應的URI 是http://www.yiibase.com/download/file.zip
使用ngx_http_accesskey_module 模塊後http://www.yiibase.com/download/file.zip?key=09093abeac094. 只有給定的key值正確了,纔可以下載download目錄下的file.zip。並且 key 值是根據用戶的IP有關的,這樣就能夠避免被盜鏈了。

聽說Nginx HttpAccessKeyModule如今連迅雷均可以防了,能夠嘗試一下。

 

案例

一、建立網站文件目錄

在var目錄下建立文件目錄

mkdir -p /www/test

  1. 把圖片(baidu.png)放到test目錄下
  2. 配置nginx.conf

    server {

        listen       8000;

        server_name  localhost;

index  index.html index.htm;

 

        location / {

            index  index.html;

    root   /var/www/test;

        }

 

location ~* \.(gif|jpg|png|swf|flv)$ {

        valid_referers none blocked 192.168.147.129;

     root /var/www/test;

        if ($invalid_referer) {

          #rewrite ^/ http://www.jzxue.com/retrun.html;

return 403;

        }

}

 }

  1. 重啓nginx
  2. 訪問nginx

http://192.168.147.129:8000/baidu.png

  1. 打開另外一臺nginx服務器(192.168.147.130)

在nginx的html文件裏修改index.html

在index.html中引用該圖片鏈接

<img alt="" src="http://192.168.147.129:8000/baidu.png"/>

  1. 測試防盜鏈

http://192.168.147.129:8000/baidu.png 能夠訪問到圖片

http://192.168.147.130 訪問不到引用的圖片

相關文章
相關標籤/搜索