Nginx提供了两种限流方式:控制速率和控制并发连接数详解

6 min read
  1. 控制速率

通过限制客户端每秒发送请求的速率来控制并发量,从而保护服务端免受恶意请求的攻击。

Nginx中提供了limit_req_zone和limit_req指令,前者用于定义限制区域,后者用于配置请求限制。

具体配置方法如下:

定义限制区域,设置最大限制数和刷新时间

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

针对指定的URI进行限制

location /login/ {
# 打开请求限制
limit_req zone=one burst=5 nodelay;

}

上述配置中,limit_req_zone定义了一个限制区域one,大小为10MB,限制速率为每秒1个请求。在location /login/中,使用limit_req指令对该URI进行限制,burst=5表示最大突发请求量为5个,nodelay表示不等待即使被限制也会尽快响应。

  1. 控制并发连接数

通过限制并发连接数来控制服务端的负载压力,保证服务的稳定性。

Nginx中提供了limit_conn_zone和limit_conn指令,前者用于定义限制区域,后者用于配置连接限制。

具体配置方法如下:

定义限制区域,设置最大连接数

limit_conn_zone $binary_remote_addr zone=addr:10m;

针对指定的URI进行连接限制

location /api/ {
# 打开连接限制
limit_conn addr 10;

}

上述配置中,limit_conn_zone定义了一个限制区域addr,大小为10MB,没指定速率,所以默认是不限速的。在location /api/中,使用limit_conn指令对该URI进行限制,10表示最大连接数为10个。