nginx 防攻击

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;
}
原文地址:https://www.cnblogs.com/zenghui940/p/4235274.html