您的位置:首页 > 运维架构 > Nginx

NGINX的防盗链和限速处理

2010-05-05 12:45 417 查看

防盗链处理

1 简单的通过REFERER判断
location ~ .*/.(gif|jpg|jpeg|png|bmp|wma|mp3|swf)$ {
valid_referers none blocked server_names *.163.com 163.com baidu.com;
if ($invalid_referer) {return 403;}
expires      30d;
}


2 NGINXHTTPACCESSKEYMODULE 插件

这个需要安装额外的模块,下载模块源码,然后按照说明文档,将下载来的源码中”$HTTP_ACCESSKEY_MODULE” 替换成 “ngx_http_accesskey_module“,再

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

完了以后再重新编译一次nginx,然后就可以在配置文件中使了。

location /download {
accesskey             on;
accesskey_hashmethod  md5;
accesskey_arg         "key";
accesskey_signature   "mypass$remote_addr";
}


这样一个下载的文件就需要 http://example.com/download/file.zip?key=09093abeac094 这样的形式进行下载

其中 key的值为 mypass和下载客户端ip 进行md5运算获得。比如在 php 中可以向如下方式输出针对客户ip的下载链接地址


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

$out_keyfile_link="防盗链文件下载
";

echo $out_keyfile_link;

?>

这样当一个用户将访问地址拷贝给别人时,因为访问ip不同,就造成 md5(”mypass”.ipaddr) 值不同,达到防盗链目的。

限速处理

限速使用 limit_zone, limit_conn 以及 limit_rate 进行配置

首先在 http 段配置一个 limit_zone,然后在需要的地方使用 limit_conn 和 limit_rate 进行限速设置,如下一个简单的例子

http {
limit_zone   one  $binary_remote_addr  10m;
server {
location /files/ {
limit_conn   one  1;
limit_rate 20k;
}
}
}


说明:

limit_zone,是针对每个IP定义一个存储session状态的容器。这个示例中定义了一个名叫one的10m大小的容器,这个名字会在后面的limit_conn中使用。

limit_conn one 1;

限制在one中记录状态的每个IP只能发起一个并发连接。

limit_rate 20k;

对每个连接限速20k. 注意,这里是对连接限速,而不是对IP限速。如果一个IP允许三个并发连接,那么这个IP就是限速为limit_rate×3,在设置的时候要根据自己的需要做设置调整,要不然会达不到自己希望的目的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: