1. 首先在http内定义限制链接和限制请求的总配置
http
{
...
#定义连接数的限制:需要配合limit_conn才生效
#针对单个IP生效(binary_remote_addr), 开辟一个perip的10M缓存空间
limit_conn_zone $binary_remote_addr zone=perip:10m;
#针对服务器名称(server_name), 开辟一个perserver的10M缓存空间
limit_conn_zone $server_name zone=perserver:10m;
#定义请求地址的限制:需要配合limit_req才生效
# 1、根据IP地址限流
# 1) remote_addr,表示通过IP地址进行限流
# 2)iplimit,指定一块内存区域大小为20M,名字为iplimit,用于记录访问的频率信息
# 3)rate=1r/s,表示每秒放行一个请求,可以根据业务需求指定,标识访问的限流频率
limit_req_zone $binary_remote_addr zone=iplimit:10m rate=5r/s;
# 2、服务器级别限流,即对同一个服务器发来的请求,对此服务器进行限流
limit_req_zone $server_name zone=server_limit:5m rate=10r/s;
server {
...
location / {
#表示该location段使用limit_conn_zone定义的zone,对单个IP(5个)或者服务器(10个)限制同时连接数
limit_conn perip 5;
limit_rate_after 5000k; #配置传输的前5000kbyte数据不限速
limit_rate 50k; #限速为每一个连接 100KB/秒
limit_conn perserver 10;
#请求限制 : 对于符合名为req_zone的iplimit配置(对于同一ip的请求,限制平均速率为1个请求/秒) , 超过部分进行延迟处理,若超过5个请求/秒,丢弃超过部分。
limit_req zone=iplimit burst=5 nodelay;
limit_req zone=server_limit burst=10 nodelay;
}
}
}