侧边栏壁纸
博主头像
gale-blog博主等级

少年一贯快马扬帆,道阻且长不转弯,要盛大,要绚烂,要哗然,要用理想的泰坦尼克号去撞现实冰川,要当烧赤壁的风,而非借箭草船,要为了一片海,就肯翻万山

  • 累计撰写 39 篇文章
  • 累计创建 5 个标签
  • 累计收到 5 条评论

目 录CONTENT

文章目录

Nginx限流方法

二月在这里
2024-01-19 / 0 评论 / 0 点赞 / 27 阅读 / 1728 字

ngx_http_limit_req_module模块(0.7.21)用于限制每个定义的键的请求处理速率,特别是来自单个IP地址的请求的处理速率。这种限制是通过“漏桶”方法实现的。
ngx_http_limit_conn_module模块用于限制每个定义的键的连接数,特别是来自单个IP地址的连接数。并不是所有的连接都被计算在内。只有当服务器正在处理请求并且整个请求头已经读取时,连接才被计数。

令牌桶算法

令牌桶算法是一种常见的限流算法,它基于一个桶来存储令牌,每个令牌代表着一次请求的许可。当请求到来时,如果桶中有令牌,则将令牌取出,请求可以通过;否则,请求被拒绝。
Nginx 实现令牌桶算法的方法是使用 limit_req 模块,并设置 rate 和 burst 参数。rate 表示令牌桶每秒填充的令牌数,burst 表示桶的容量大小。例如,下面的配置表示限流速率为 10r/s,桶的大小为 20:

limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
server {
			location / {
					limit_req zone=mylimit burst=20;
				# 处理请求的逻辑
		}
}


漏桶算法

漏桶算法也是一种常见的限流算法,它基于一个固定容量的桶,以固定的速率流出请求。当请求到来时,如果桶中还有空间,则请求可以通过;否则,请求被拒绝。也就是说流量流入的速度是不定的,但是流出的速度是恒定的。
Nginx 实现漏桶算法的方法是使用 limit_req 模块,并设置 delay 参数。delay 表示请求被拒绝后需要等待的时间(以秒为单位)。例如,下面的配置表示限流速率为 10r/s,桶的大小为 20,请求被拒绝后等待 1s:

limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;

server {
	location / {
			limit_req zone=mylimit burst=20 delay=1s;
			# 处理请求的逻辑
		}
}


计数器算法

计数器算法是一种简单的限流算法,它基于一个计数器来记录请求的数量。当请求到来时,如果计数器的值小于限制的数量,则请求可以通过;否则,请求被拒绝。
Nginx 实现计数器算法的方法是使用 limit_conn 模块,并设置 conn 参数。conn 表示最大允许的连接数。例如,下面的配置表示最多只允许 100 个连接:

limit_conn_zone $binary_remote_addr zone=mylimit:10m;

server {
		location / {
					limit_conn mylimit 100;
					# 处理请求的逻辑
			}
}

0

评论区