1,判断refer,我们最常用的判断访问nginx中的referer的值,判断攻击者的referer特点来阻止攻击
set $flagjs_enable 0; # 0 - off , 1 - on
set $flagjs 0;
if ( $flagjs_enable = "1" )
{
set $flagjs 1;
}
#上面是开关
if ($http_user_agent ~* "Baiduspider") {
set $flagjs "${flagjs}Y";
}
if ($http_user_agent ~* "baidu") {
set $flagjs "${flagjs}Y";
}
if ($flagjs = "1YY") {
#return 400;
add_header Set-Cookie "wdzjccjs=wdzjcc$remote_addr"; #这两句是js跳转
rewrite .* "$scheme://$host$uri" redirect;
}
2,判断攻击的ip特点,大多数攻击者都会通过代理来攻击,然有些代理是特点多个ip,我们正常
访问是单个ip(排除手机访问以外),这个只有在攻击的时候开启,很有效果
location / {
root /www/html;
#proxy
if ($http_x_forwarded_for ~ '^\d+.\d+.\d+.\d+\W\s\d+.\d+.\d+.\d+$'){ #这个是匹配两个ip的
return 503;
}
index index.php index.html index.htm;
include .htaccess;
}
3,利用nginx limit_zone、limie_req_zone、limit_speed_zone(这个模块需要安装)来控制并发连接数、连接频率、带宽
下载nginx第三方模块nginx_limit_speed_module-master.zip
cd nginx编译目录
./configure 之前编译参数 --add-module=模块目录
make
cp objs/nginx 到nginx安装目录sbin/nginx
http {
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_req_zone $binary_remote_addr zone=reqip:10m rate=10r/s;
limit_speed_zone speedip $binary_remote_addr 10m;
}
server {
limit_conn perip 20;
limit_rate 200k;
limit_speed speedip 200k;
limit_req zone=reqip burst=30;
}