限流原则:每个IP每秒只能访问n次
http {
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
·······
location / {
limit_req zone=mylimit burst=5 nodelay;
limit_req _log_level error;
limit_req_status 503;
·······
}
}
step1:定义请求限制空间
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
1. $binary_remote_addr,表明是以remote_addr为限制目标,加上binary是为了压缩内存占用空间
remote_add记录的是ip地址信息,如:“192.168.1.222”会占用7到15个字节,
而如果用binary_remote_addr只会占用4个字节。
就相当于不同的表示方式,一个全程一个缩写的表示。
2. zone=name:size,分配一个以name为名的并且大小为size的内存空间,用来存储访问的频次信息
1M能存储16000 IP地址的访问信息,10M可以存储16W IP地址访问信息。如果区域存储耗尽,则删除最近最少使用的状态。如果即使在此之后无法创建新状态,请求也会以错误终止。--If storage is exhausted when NGINX needs to add a new e