Nginx通过limit_conn_zone和limit_req_zone对同一个IP地址进行限速限流,可防止DDOS/CC和flood攻击。
修改nginx.conf配置文件
http {
......
# 在http节点中添加下面这一行
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
# 在server节点中添加这一行
limit_req zone=one burst=10 nodelay;
......
}
}
limit_req_zone的参数详解
- $binary_remote_addr:表示客户端ip地址的二进制,当此nginx前方还存在代理时,需进行处理
- zone=one:10m:为session会话状态分配一个大小为10m内存存储区,并且设定名称为one.
- rate=1r/s:表示请求频率不能超过每秒一次。
limit_req的参数详解(也可以添加在某一个请求中)
- zone=one:表示这个server服务收到的请求放在one的那个内存区域,等待被处理
- burst=10:表示请求队列的长度,比如我设置了rate=1r/s,而同一时刻有15个请求发过来,那么第一个请求会被处理,10个请求会被存在队列里等待被处理,而剩下4个请求就会直接响应503状态码。
- nodelay:表示不延时。比如rate=1r/s,如果不设置nodelay就会严格按照1秒处理一个请求的频率,直观的看就是页面数据卡了,过了一秒后才加载出来。
原文链接:https://blog.csdn.net/czx2018/java/article/details/102655512