一,普通防盗,根据header头信息进行判断

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
              #expires 30d;
              #access_log off;
              ##valid_referers none blocked *.xxx.com xxx.com;
              valid_referers *.xxx.com xxx.com;

              if ($invalid_referer) {
                return 403;
                #rewrite ^/ http://img.xxx.com/err.jpg;
              }

        }

或者对某个图片目录防盗

location /images/ { 
  ##alias /data/images/; 
  valid_referers none blocked server_names *.xxx.com xxx.com ; 
  if ($invalid_referer) {return 403;} 
}

二,使用ngx_http_accesskey_module

  1. 下载NginxHttpAccessKeyModule模块文件

  2. 修改nginx accesskey配置文件

vim nginx-accesskey-2.0.3/config
#修改$HTTP_ACCESSKEY_MODULE为ngx_http_accesskey_module
USE_MD5=YES
USE_SHA1=YES
ngx_addon_name=ngx_http_accesskey_module
HTTP_MODULES="$HTTP_MODULES ngx_http_accesskey_module"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_accesskey_module.c"

3. 编译nginx

./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module \
--with-http_ssl_module --with-http_gzip_static_module --with-ipv6 --add-module=./nginx-accesskey-2.0.3/
make
make install

4. 修改nginx配置文件

#location / { #限制相应目录
location ~ .*\.(7z|iso|msi|tar|zip|rar|gz|exe)$ { #或限制相应文件accesskey on;
    accesskey_hashmethod md5;
    accesskey_arg "key";
    accesskey_signature "pass$remote_addr"; #pass为干扰码,可自定义修改
}

accesskey为模块开关; 

accesskey_hashmethod为加密方式MD5或者SHA-1; 

accesskey_arg为url中的关键字参数; 

accesskey_signature为加密值,此处为pass和访问IP构成的字符串。 


5. 防盗代码测试

$ipkey= md5("pass".$_SERVER['REMOTE_ADDR']);
echo "<a href="file.rar">file</a>";
echo "<a href="file.rar?key=".$ipkey."">file.rar?key=".$ipkey.">file</a>";


三,使用secure_link防盗

  1. 为nginx安装secure_link模块

 # ./configure --with-http_secure_link_module \
 --prefix=/usr/local/nginx-1.4.2 --with-http_stub_status_module
 # make
 # make install

2. 配置nginx

location  / {
    secure_link $arg_md5,$arg_expires;  #设置两个变量 
    secure_link_md5 "key$remote_addr$arg_expires";   #设置md5,当作口令 

    if ($secure_link = "") {
        return 403;
    }

    if ($secure_link = "0") {
        return 410;
    }
}

3. 防盗代码测试

$secret = 'key';   // key,自定义秘钥 
$ipip=$_SERVER["REMOTE_ADDR"]; 
$expires = time()+300; //这里是300妙内访问有效 

$md5 = base64_encode(md5($secret . $ipip . $expires, true)); // MD5生成 
$md5 = strtr($md5, '+/', '-_'); // + and / 替换掉 
$md5 = str_replace('=', '', $md5); // 替换= 

$url = "http://domain.com/test.zip?md5=$md5&expires=$expires";  //安全下载链接demo设置 
$arr = array("url"=>$url, "expires"=>date("Y-m-d H:i:s", $expires), "md5"=>$md5);
echo json_encode($arr); //json格式输出