防盗链处理
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,在设置的时候要根据自己的需要做设置调整,要不然会达不到自己希望的目的。
本文介绍如何利用Nginx配置防盗链及限速功能,包括通过REFERER判断进行简单防盗链处理,使用HTTP ACCESS KEY MODULE插件增强安全性,以及采用limit_zone, limit_conn和limit_rate实现精准流量控制。
1403

被折叠的 条评论
为什么被折叠?



