目录
目录X
联系信息 首页 /正文内容

nginx限制某请求并发数

问题描述:网站前后台都返回502状态码,检查网络攻击并不算高,通过日志分析发现大量/ContentManage/Ajax/GetPreAndNextPublicInformation或/ContentManage/Ajax/GetPrevAndNextContent请求,虽然不会对网站安全造成影响,而且是会直接中断跳出的,但是请求比较集中,造成了其他正常请求的响应速度变慢

解决方法:通过nginx限制具体url的访问并发数


在nginx的http{}节下添加

 #并发限制

limit_conn_zone $binary_remote_addr zone=addr:20m;

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

limit_conn_zone:定义一个名为 addr 的共享内存区(20MB),用于记录每个客户端 IP( $ binary_remote_addr)的并发连接数。

  • limit_req_zone:定义一个名为 one 的共享内存区(20MB),用于记录每个客户端 IP 的请求频率,限制为 1 次/秒。

然后在 location ~* ^/ContentManage/Ajax/GetPreAndNextPublicInformation 和/ContentManage/Ajax/GetPrevAndNextContent下添加:

limit_conn addr 1; # 同一 IP 最多 1 个并发连接
limit_req zone=one nodelay;  # 请求速率限制为 1r/s,突发请求不延迟(直接处理或拒绝)

可以根据实际需求看是否添加burst参数

limit_req zone=one burst=3 nodelay; #burst=3 表示允许最多 3 个突发请求

注意默认限流/限连失败返回 503状态码,可自行定义错误代码。

【打印正文】 发布时间:2026-01-31 17:38:54 浏览次数: 作者: 来源:本站原创