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+Wsd+.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; }