JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

Nginx上的限流方式

wys521 2024-09-12 23:13:44 精选教程 29 ℃ 0 评论

电商平台经常会碰到的高并发场景,除了做流量分流处理,可能还要做用户黑白名单、信誉分析,进而根据用户ip信誉权重做相应的流量拦截,限制流量。

Nginx 提供两种限流方式,一是控制速率 ngx_http_limit_req_module,二是控制并发连接数 ngx_http_limit_conn_module。

1.ngx_http_limit_req_module 模块来限制请求的访问频率

	http {
		#$binary_remote_addr 表示通过remote_addr这个标识来做限制
		#"binary_"的目的是缩写内存占用量,是限制同一客户端ip地址
		#$binary_remote_addr 表示保存客户端IP地址的二进制形式。
		
		#zone=one:10m表示生成一个大小为10M,名字为one的内存区域,用来存储访问的频次信息
		#16000个IP地址的状态信息约1MB,所以示例中区域可以存储160000个IP地址。
		
		#rate=1r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒1次,还可以有比如30r/m的
		#示例中速率不能超过每秒1个请求。
		#限制访问频率(正常流量)
		
		limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
		
		server {
			location /search/ {
				#zone=one 设置使用哪个配置区域来做限制,与上面limit_req_zone 里的name对应
				
				#burst=5,重点说明一下这个配置,burst爆发的意思,这个配置的意思是设置一个大小为5的缓冲区当有大量请求(爆发)过来时,
				#超过了访问频次限制的请求可以先放到这个缓冲区内
				
				#nodelay,如果设置,超过访问频次而且缓冲区也满了的时候就会直接返回503,如果没有设置,则所有请求会等待排队
				
				
				限制访问频率(突发流量)
				
				limit_req zone=one burst=5 nodelay;
			}
	}


2.ngx_http_limit_conn_module 限制并发连接数

这个模块用来限制单个IP的请求数。并非所有的连接都被计数。

只有在服务器处理了请求并且已经读取了整个请求头时,连接才被计数。

	
 limit_conn_zone $binary_remote_addr zone=perip:10m;
 	limit_conn_zone $server_name zone=perserver:10m;
 	server {
 		#limit_conn perip 20:对应的key是 $binary_remote_addr,表示限制单个IP同时最多能持有20个连接
 		limit_conn perip 10;
 		
 		#limit_conn perserver 100:对应的key是 $server_name,表示虚拟主机(server) 同时能处理并发连接的总数。
 		#注意,只有当 request header 被后端server处理后,这个连接才进行计数
 		
 		limit_conn perserver 100;
 	}

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表