当前位置: > Linux服务器 > nginx >

Nginx教程:防盗链和带宽限制

时间:2014-07-21 03:32来源:linux.it.net.cn 作者:it
对于nginx而言,本身也有简单的防盗链模块ngx_http_referer_module,配置比较简单,定义文件类型:

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
valid_referers none blocked server_names *.163.com 163.com baidu.com;
if ($invalid_referer) {return 403;}
expires 30d;
}

同时还有一个第三的防盗链相关模块,ngx_http_accesskey_module:
location /download {
accesskey on;
accesskey_hashmethod md5;
accesskey_arg “key”;
accesskey_signature “mypass$remote_addr”;
}

具体的使用方法:http://wiki.nginx.org//NginxHttpAccessKeyModule

对于带宽限制,apache可以动态编译一些模块进去,mod_evasive20.so和mod_bw.so都是对防止简单的dos和带宽限制而存在的,而对于nginx,可以使用nginx的标准模块ngx_http_limit_zone_module,进行会话的并发连接数控制:
http {
limit_zone one $binary_remote_addr 10m;
#定义一个叫“one”的记录区,总容量为 10M,以变量 $binary_remote_addr 作为会话的判断基准(即一个地址一个会话)

server {

location /attachments/ {
limit_conn one 1;
limit_rate 100k;
}
# 限制 /attachments/ 目录下,一个会话只能进行一个连接。超过一个,则返回503。imit_rate 来控制该目录的下载速度。
}

这是简单的nginx的方案,更高级的应用应该是在客户端类型或者根据日志分析后,针对具体问题做文章,例如对$http_user_agent的特殊内容进行匹配,然后返回503。

为什么要返回503?如果直接返回403,有可能被下载工具发现,403的状态被认为被禁止了,然后进行调整继续作案。而返回一个503,对服务器来说影响不大,只占用一个nginx的线程而已。

(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容