##nginx.conf
# binary_remote_addr
# binary_目的时缩写内存占用,remote_addr表示通过IP地址来限流
# zone=iplimit:20m
# iplimit是一块内存区域(记录访问频率信息),20m是指这块内存区域的大小
# rate=1r/s,标识访问的限流频率
limit_req_zone $binary_remote_addr zone=iplimit:20m rate=1r/s;
server {
server_name www.test.com;
location /access-limit/ {
proxy_pass http:127.0.0.1:80/;
# 基于IP地址的限制
# zone=iplimit => 引用limit_req_zone中的zone变量
# burst=2,设置一个大小为2的缓冲区域,当大量请求到来,
# 请求数量超过限流频率时,将其放入缓冲区域
# nodelay,缓冲区满了之后,直接返回503异常
limit_req zone=iplimit burst=2 nodelay;
}
}
##nginx.conf
# 根据服务器级别做限流
limit_req_zone $server_name zone=serverlimit:10m rate=1r/s;
# 基于连接数的配置
limit_conn_zone $binary_remote_addr zone=preip:20m;
limit_conn_zone $server_name zone=perserver:20m;
server {
server_name www.test.com;
location /access-limit/ {
proxy_pass http:127.0.0.1:80/;
# 基于服务器级别的限制
# 通常情况下,server级别的限流速率时最大的
limit_req zone=serverlimit burst=1 nodelay;
# 每个server最多保持100个连接
limit_conn perserver 100;
# 每个IP地址最多保持1个连接
limit_conn perip 1;
# 异常情况504,默认503
limit_req_status 504;
limit_conn_status 504;
}
}