ms133 发表于 2016-12-23 10:53:23

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;
     }
    }

}
页: [1]
查看完整版本: nginx下载服务器