Nginx实现初步抵御DDOS的方法、限速、限请求数、限制连接数

2021-03-19 1366点热度 1人点赞 1条评论

前言

如果你的Web服务器有流量限制,或者流量是要收费的,那么可能要需要加一层简单的DDOS防护,如果专门购买DDOS防护产品,那么成本也是挺高的。nginx下只要稍加配置,就可以初步实现了。

实现

如果要设置每日、每月流量上线,请查看 https://blog.terrynow.com/2021/06/06/linux-server-iptables-set-daily-or-monthly-qutoa/

Nginx可以通过limit_reqlimit_connlimit_rate来实现

  • limit_req 限制每秒请求数

配置举例:

limit_req可以放在server下,也可以放在location下

http {
    #定义一个zone名字叫one,并为这个zone分配10M内存,用来存储会话(二进制远程地址),1m内存可以保存16000个会话
    #rate=30r/s; 限制频率为每秒30个请求
    
    limit_req_zone $binary_remote_addr zone=one:10m rate=30r/s;

    server {
        #执行的动作,通过zone名字对应

        #burst=5 burst爆发的意思,这个配置的意思是设置一个大小为5的缓冲区当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内等待,但是这个等待区里的位置只有5个,超过的请求会直接报503的错误然后返回。
        #nodelay 如果没有设置,则所有请求会依次等待排队 如果设置,会在瞬时提供处理(burst + rate)个请求的能力,请求超过(burst + rate)的时候就会直接返回503,永远不存在请求需要等待的情况。(这里的rate的单位是:r/s)
                 
        #limit_req zone=one burst=10 nodelay;
        limit_req zone=one burst=10;
    }
}
  • limit_conn 限制IP连接数

配置举例:

http {
    #定义一个zone名字叫addr
    limit_conn_zone $binary_remote_addr zone=addr:10m;

    server {
        #限制同一时间内50个连接,超出的连接返回503
        limit_conn addr 50;
    }
}
  • limit_rate 限速

配置举例

location /download/ {
    limit_rate 500k;
}

# 先全速传输1M,然后开始限速:
location /download2/ {
    limit_rate_after 1m; 
    limit_rate 500k; 
}

 

 

admin

这个人很懒,什么都没留下

文章评论

  • Londice

    Kamagra Online Kostenlos Uhopem - buy cialis generic online cheap Buy Kamagra Without Prescription Zraras buy cialis online europe</a> Wsfalx Azjzsl - where can i buy cialis on line Viagra Aumenta Dimensioni

    2022-04-02
  • 您需要 登录 之后才可以评论