当遇到一些IP或用户过量访问时,需要进行针对性的频率限制,比如针对IP或用户信息(比如token)
nginx配置指定IP的频率限制
本机和本地局域网不限制频率,其他IP都限制1r/s
# 1. 使用geo指令,从ip地址映射到0或1。 (不限制的ip映射到1)
geo $whiteList {
default 0;
127.0.0.1 1;
192.168.1.0/24 1;
}
# 2. 在从0和1映射limit_key,1就映射到"",这样在limit_req_zone中使用就不会被限制
map $whiteList $limit_key {
0 $binary_remote_addr;
1 "";
}
# 3. 本地IP映射的$limit_key是"",就不会被限制,其他IP都会被限制
limit_req_zone $limit_key zone=allips:10m rate=1r/s;
server {
listen 80;
server_name localhost;
# 4. 使用频率限制规则allips
limit_req zone=allips nodelay;
//其他配置省略
}
- geo指令: 可以从ip地址映射到对应的值
- map指令: 值映射
针对自定义值的频率限制
- 使用http_token会读取header中的token的值
limit_req_zone $http_token zone=token:10m rate=1r/s;
server {
listen 80;
server_name localhost;
limit_req zone=token nodelay;
网友评论