12.Nginx极速版-限流和限速
限流
限流方式主要有以下两种,安装选其中一种即可。
单位时间访问限流 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