JAVA全系列 教程
3762个小节阅读:7094.4k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
根据nginx官网提供的说法,有两种算法,一种是漏桶算法,一种是令牌桶算法
语法结构
放在http{} 内
xxxxxxxxxx
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
参数解析:
- 第一个参数:$binary_remote_addr 限制同一客户端ip地址。
- 第二个参数:zone=mylimit:10m 用来存储访问的频次信息。
- 第三个参数:rate=1r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒1次,还可以有比如30r/m的。
xxxxxxxxxx
limit_req zone=mylimit burst=1 nodelay;
放在server{}内
参数:
- 第一个参数:zone=one 设置使用哪个配置区域来做限制,与上面limit_req_zone 里的name对应。
- 第二个参数:burst=5,重点说明一下这个配置,burst爆发的意思,这个配置的意思是设置一个大小为5的缓冲区当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内。
- 第三个参数:nodelay,如果设置,超过访问频次而且缓冲区也满了的时候就会直接返回503,如果没有设置,则所有请求会等待排队。
ngx_http_limit_conn_module 提供了限制连接数的能力,利用 limit_conn_zone 和 limit_conn 两个指令即可。
语法结构
xxxxxxxxxx
http{
#ip limit
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
}
在需要 限制并发数 和 下载带宽 的网站配置 server {}里加上如下代码:
xxxxxxxxxx
server {
limit_conn perip 10;
limit_conn perserver 100;
}
参数说明:
补充说明下参数:
- limit_conn perip 10 作用的key 是 $binary_remote_addr,表示限制单个IP同时最多能持有10个连接。
- limit_conn perserver 100 作用的key是 $server_name,表示虚拟主机(server) 同时能处理并发连接的总数。
限流主要针对外部访问,内网访问相对安全,可以不做限流,通过设置白名单即可。利用 Nginx ngx_http_geo_module 和 ngx_http_map_module 两个工具模块即可搞定。
查看是否具有该功能
xxxxxxxxxx
./configure --help |grep http_limit_req_module
./configure --help |grep http_geo_module
./configure --help |grep http_map_module
在 nginx.conf 的 http 部分中配置白名单:
xxxxxxxxxx
geo $limit {
default 1;
39.100.243.125 0;
192.168.0.0/24 0;
172.20.0.35 0;
}
map limit limit_key {
0 "";
1 $binary_remote_addr;
}
limit_req_zone $limit_key zone=myRateLimit:10m rate=10r/s;
参数:
- geo 对于白名单(子网或IP都可以) 将返回0,其他IP将返回1。
- map 将limit转换为 limit_key,如果是 $limit 是0(白名单),则返回空字符串;如果是1,则返回客户端实际IP。
- limit_req_zone 限流的key不再使用 binary_remote_addr,而是limit_key 来动态获取值。如果是白名单,limit_req_zone 的限流key则为空字符串,将不会限流;若不是白名单,将会对客户端真实IP进行限流。
1. Nginx实现限流,limit_req_zone指令中rate=1r/s参数意思是____。
A 每秒1次
B 每分1次
C 每秒20次
D 每分20次
1=>A