[Nginx]限流

幻想 2022年09月22日 34 0

做什么

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器。

在哪配置

nginx的限流主要通过修改nginx.conf文件来进行。

限流方式

通过请求数限流

http {
	limit_req_zone $binary_remote_addr zone=ip_addr_limit:10m rate=1r/s;
	server {
		server_name localhost;
		listen       80;
		location / {
			proxy_pass http://localhost:8080/;
			# 根据ip进行限流
			limit_req zone=ip_addr_limit burst=1 nodelay;
			limit_req_status 503;
		}
	}
}

参数说明:

  • $binary_remote_addr: binary_目的是缩写内存占用,remote_addr表示通过IP地址来限流
  • zone: ip_addr_limit是一块内存区域(记录访问频率信息),10m是指这块内存区域的大小
  • rate: 1r/s = 1 request / second,类似于100/m(每分钟100次请求)
  • burst: burst=1,设置一个大小为2的缓存区域,当大量请求到来,请求数量超过限流频率时,将其放入缓冲区域
  • nodelay: 缓冲区满了后直接返回503异常
  • limit_req_status: 超过请求数后返回的状态码,默认503

通过连接数限流

http {
	limit_conn_zone $binary_remote_addr zone=ip_addr_limit:10m;
	limit_conn_zone $server_name zone=server_addr_limit:10m;
	server {
		server_name localhost;
		listen       80;
		location / {
			proxy_pass http://localhost:8080/;
			# 每个服务最多保持100个连接
			limit_conn server_addr_limit 100;
			# 每个ip只能有一个连接
			limit_conn ip_addr_limit 2;
			limit_conn_status 503;
		}
	}
}

参数说明:

  • $binary_remote_addr: binary_目的是缩写内存占用,remote_addr表示通过IP地址来限流
  • $server_name: 表示通过服务器来限流
  • zone: ip_addr_limit是一块内存区域(记录访问频率信息),10m是指这块内存区域的大小
  • limit_conn: 连接数,使用方式为limit_conn zone number,number即为连接数
  • limit_conn_status: 超过连接数后返回的状态码,默认503

参数连接:
Nginx限流

Last Updated: 2022/09/24 02:02:10
linux基础命令_yum linux基础_SELinux