0
点赞
收藏
分享

微信扫一扫

nginx针对ip做限流配置

Yaphets_巍 2023-09-21 阅读 32

要在Nginx负载均衡中实现针对同一个请求IP的频率限流配置,并且超过限制次数的请求直接丢弃,可以使用Nginx的HttpLimitReqModule模块结合变量和特定的配置来实现。以下是具体的配置步骤:

  1. 确保你的Nginx已经安装了HttpLimitReqModule模块。该模块用于控制请求速率。
  2. 打开Nginx的配置文件(通常是nginx.conf),找到你想要配置限流的位置(例如某个具体的location)。
  3. 在该位置添加以下代码:

limit_req_zone $binary_remote_addr zone=ratelimit:10m rate=100r/m;

上述代码创建了一个名为ratelimit的限流区域,并设置了每分钟允许的请求数为100。这里假设你的需求是每个IP一分钟最多请求十次,那么将100改为10即可。

  1. 在同一个位置添加以下代码:

map $http_x_real_ip $limit_ip {
    default         "";
    ~^(\d+\.\d+\.\d+\.\d+)$   $1;
}

limit_req zone=ratelimit burst=10 nodelay;

上述代码使用$http_x_real_ip变量将真实客户端IP保存在$limit_ip变量中,并且将该变量传递给limit_req指令进行限流操作。

  1. 在同一个位置下方添加以下代码:

if ($limit_ip) {
    limit_req zone=ip_limit:$limit_ip:10m burst=10 nodelay;
}

limit_req_status 429;

上述代码根据$limit_ip变量判断是否存在IP值,如果存在则对该IP进行额外的限流操作。这里我们设置了一个名为ip_limit的限流区域,每分钟最多只允许10次请求。

同时,使用limit_req_status 429;将超过限制次数的请求返回状态码429,即"Too Many Requests"。

  1. 保存并关闭配置文件。
  2. 重新加载Nginx配置,以使更改生效:执行命令 nginx -s reload
举报

相关推荐

0 条评论