限流

限流方式主要有以下两种,安装选其中一种即可。

单位时间访问限流 QPS

nginx限流配置_nginx limit_conn perip_zhujuntiankong的博客-CSDN博客

1、http模块下添加

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

  • limit_req_zone:这是一个 Nginx 模块,用于定义请求限制的区域。
  • $binary_remote_addr:这是一个变量,表示客户端的IP地址。$binary_remote_addr将客户端的IP地址转换为二进制格式,以便在请求限制区域中使用。
  • zone=ip_limit:10m:这是定义请求限制区域的指令。在这个例子中,它被命名为"ip_limit",并且分配了10MB 的内存空间来存储请求的相关信息。1M 能存储 16000 IP 地址的访问信息,10M 可以存储16W IP 地址访问信息。
  • rate=10r/s:这是指在限制区域内允许的请求速率。在这个例子中,每秒钟允许处理10个请求。

这个配置指令的作用是创建一个请求限制区域,以限制来自不同客户端 IP 地址的请求频率。每个 IP 地址都有自己的请求限制计数器,并且每秒钟只允许处理指定数量的请求。当请求超过限制频率时,可以选择延迟处理请求或者返回错误响应。这样可以防止恶意或过多的请求对服务器造成负载压力。

2、location模块下添加

limit_req zone=ip_limit burst=1 nodelay;

  • limit_req:这是一个 Nginx 模块,用于限制请求的频率。
  • zone=ip_limit:这是一个限制请求的区域名称,可以根据需要自定义。在这个例子中,它被命名为"ip_limit"。
  • burst=1:重点说明一下这个配置,burst 爆发的意思,这个配置的意思是设置一个大小为 1 的缓冲区当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内。
  • nodelay:这是一个可选参数,表示不延迟请求。如果设置,超过访问频次而且缓冲区也满了的时候就会直接返回503,如果没有设置,则所有请求会等待排队。

这个配置指令的作用是限制来自同一个 IP 地址的请求频率,以防止过多的请求对服务器造成负载压力。当请求超过限制频率时,可以选择立即返回错误响应或者延迟处理请求。

==配合 limit_req_zone 使用,不同的请求可以设置不同的 QPS。==

其他参数

Syntax:	limit_req_log_level info | notice | warn | error;
    Default:	
    limit_req_log_level error;
    Context:	http, server, location

当服务器由于limit被限速或缓存时,配置写入日志。延迟的记录比拒绝的记录低一个级别。例子: limit_req_log_level notice 延迟的的基本是info。

Syntax:	limit_req_status code;
    Default:	
    limit_req_status 503;
    Context:	http, server, location

设置拒绝请求的返回值。值只能设置 400 到 599 之间。

限制并发连接数

说明:使用 nginx 的 ngx_http_limit_conn_module 模块进行限制的,涉及命令 limit_conn_zone 和 limit_conn;

http {

    limit_conn_zone $binary_remote_addr zone=perip:10m;
    limit_conn_zone $server_name zone=perserver:10m;
    
  location / {
    # 什么都不配置默认为轮询  
    proxy_pass http://talebook-apps;

    limit_conn  perip 3;

    limit_conn  perserver 10;
  }
}

Limit_conn perip 10:对应的 key 是 $binary_remote_addr,表示限制单个 IP 同时最多能持有 10个连接。

Limit_conn perserver 1000:对应的 key 是 $server_name,表示虚拟主机 (server) 同时能处理并发连接的总数,即该服务能承受的最大并发数。

Syntax:	limit_conn_log_level info | notice | warn | error;
    Default:	
    limit_conn_log_level error;
    Context:	http, server, location

当服务器限制连接数时,设置所需的日志记录级别。

Syntax:	limit_conn_status code;
    Default:	
    limit_conn_status 503;
    Context:	http, server, location