一.防盗链设置



 



在nginx 的wiki站了解到一个第三方模块ngx_http_accesskey_module,通过自己测试,能有效的防盗链,特别是对于文件下载站的防盗链非常有效。



有关这个模块的一些文档在这里去看:http:///NginxHttpAccessKeyModule



 



1. 下载NginxHttpAccessKeyModule模块文件:Nginx-accesskey-2.0.3.tar.gz

2. 解压此文件后,找到nginx-accesskey-2.0.3下的config文件。



编辑此文件:替换其中的”$HTTP_ACCESSKEY_MODULE”为”ngx_http_accesskey_module”



3. 用一下参数重新编译nginx:

shell> ./configure --add-module=path/to/nginx-accesskey4. 修改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://xx/download/xx.rar?key=".$ipkey.">download_add_key</a><br />";
  $output_org_url="<a href=http://xx/download/xx.rar>download_org_path</a><br />";
  echo $output_add_key;
  echo $output_org_url;
?>

原理是:

通过接受到的参数值判断访问是否合法。这里有一套MD5加密算法。前台的网页根据用户的IP产生一个MD5值,后端的WEB SERVER就来判断这个MD5,对的就放行。不对就拒绝。浏览器上直接访问物理文件,是不能打开的。

如我的download 目录下有一个 file.zip 的文件。对应的URI 是http://xx/download/file.zip

使用ngx_http_accesskey_module 模块后http://xx/download/file.zip?key=09093abeac094. 只有给定的key值正确了,才能够下载download目录下的file.zip。而且 key 值是根据用户的IP有关的,这样就可以避免被盗链了。

 


二. nginx的线程限制和带宽限制



这里有nginx的标准模块ngx_http_limit_zone_module,

这个模块可以针对条件,进行会话的并发连接数控制。

http { 
   
  
limit_zone one $binary_remote_addr 10m; #定义one
 
  
    server { 
   
        location /download/ { 
   
            limit_conn   one  1;   #一个ip客户端,最大2个并发线程 
   
limit_rate 
     
   32k;         #每个线程最大下载速度 
  
}
 
  
   if ($request_method !~* ^(GET)$ ) {  #只允许get方式请求,其他访问方式403 
   
          return 403;
 
   
     }
 
       } 
   
 
  
}