nginx服务器请求限制模块
#定义一个名为one的limit_req_zone用来存储session,大小是10M内存,
limit_zone one $binary_remote_addr 10m;
以$binary_remote_addr 为key,限制平均每秒的请求为20个,1M能存储16000个状态,rete的值必须为整数,如果限制两秒钟一个请求,可以设置成30r/m
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
location /search/ {
limit_req zone=one burst=5 nodelay;
}
第一段配置
第一个参数:$binary_remote_addr 表示通过 remote_addr 这个标识来做限制,“binary_”的目的是缩写内存占用量,是限制同一客户端ip地址
第二个参数:zone=one:10m表示生成一个大小为10M,名字为one的内存区域,用来存储访问的频次信息
第三个参数:rate=1r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒1次,还可以有比如30r/m的
第二段配置
第一个参数:zone=one 设置使用哪个配置区域来做限制,与上面limit_req_zone 里的name对应
第二个参数:burst=5,重点说明一下这个配置,burst爆发的意思,这个配置的意思是设置一个大小为5的缓冲区当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内
第三个参数:nodelay,如果设置,超过访问频次而且缓冲区也满了的时候就会直接返回503,如果没有设置,则所有请求会等待排队
Nginx限制IP并发数与下载速度
limit_zone one $remote_addr 10m;
location /download {
限制每个IP只能发起一个并发连接
limit_conn one 1;
如果想设置用户下载文件的前10m大小时不限速,大于10m后再以128kb/s限速
limit_rate_after 10m;
限速 128k
limit_rate 128k;
}
nginx实现防盗链
valid_referers none | blocked | server_names;
所有来至ttlsa.com和域名中包含google和baidu的站点都可以访问到当前站点的图片,
如果来源域名不在这个列表中,那么$invalid_referer等于1
location ~* \.(gif|jpg|png|bmp)$ {
valid_referers none blocked *.ttlsa.com server_names ~\.google\. ~\.baidu\.;
if ($invalid_referer) {
return 403;
#rewrite ^/ http://www.ttlsa.com/403.jpg;
}
}
http://www.jianshu.com/p/f9888812e89c
http://www.jb51.net/article/45643.htm
http://www.ttlsa.com/nginx/nginx-referer/