nginx下载服务器

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

有关这个模块的一些文档在这里去看:http://wiki.codemongers.com/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-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://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;
     }
    }
}

猜你喜欢

转载自kavy.iteye.com/blog/1947683