-
Nginx
- 主动防御
NginxHttpLimitZoneModule和NginxHttpLimitReqModule模块
http { limit_req_zone $binary_remote_addr zone=my_req_zone:10m rate=1r/s; #平均请求速率为1个每秒 limit_zone my_zone $binary_remote_addr 10m; limit_req_zone $cookie_token zone=session_limit:3m rate=1r/s; server { location /somedir/ { limit_conn my_zone 1; #somedir 下 每个IP 只能有一个连接 limit_req_zone zone= my_req_zone burst=2; #最高2个每秒的突发请求速率 limit_req zone=session_limit burst=5; } } }
-
被动防御
- IP黑名单
- iptables
-
特征码
-
Cookie
-
特征Cookie 重定向302
if ($cookie_say != "hbnl$remote_addr"){ add_header Set-Cookie "say=hbnl$remote_addr"; rewrite .* "$scheme://$host$uri" redirect; }
-
完美版
-
借助nginx_lua
rewrite_by_lua ' local say = ngx.md5("opencdn" .. ngx.var.remote_addr) if (ngx.var.cookie_say ~= say) then ngx.header["Set-Cookie"] = "say=" .. say return ngx.redirect(ngx.var.scheme .. "://" .. ngx.var.host .. ngx.var.uri) end ';
-
-
超级版
- 解决同一IP下 获取得到不同token
ewrite_by_lua ' local random = ngx.var.cookie_random if(random == nil) then random = math.random(999999) end local token = ngx.md5("opencdn" .. ngx.var.remote_addr .. random) if (ngx.var.cookie_token ~= token) then ngx.header["Set-Cookie"] = {"token=" .. token, "random=" .. random} return ngx.redirect(ngx.var.scheme .. "://" .. ngx.var.host .. ngx.var.uri) end ';
-
-
JVM
-
RSAP