欢迎光临
我们一直在努力

如何使用Ngnix阻止机器人访问你的API?,终端服务器超出最大允许连接数

我们都知道,今天的互联网充满了机器人,他们从客户端使用刮擦或服务器端通过请求我们的API来窃取你的数据。由于从人类中识别机器人变得非常困难,但我们可以采取某些措施来检测和阻止至少一些机器人。

技术非常简单;如果来自同一IP地址的API请求超过了限制,服务器就需要阻止这些请求。

你需要在nginx中使用ngx_http_limit_req_module模块来限制一个IP地址在特定时间段内向服务器发送的请求数量。下面是如何配置的,如果一个IP地址超过了允许的请求数,就会被阻止。

编辑nginx配置文件(通常位于/etc/nginx/nginx.conf或/usr/local/nginx/conf/nginx.conf),在http块中添加以下代码。

http {
      limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;

      server {
                # server configuration
                        location / {
                                      limit_req zone=mylimit burst=20 nodelay;
                                      # other directives
                        }
      }
}

在上面的代码中,limit_req_zone设置了一个名为 "mylimit "的共享内存区,可以容纳10兆字节的数据,并允许每秒最多10个请求。这一行应该加在http块中。

接下来,在定位块中,limit_req对一个IP地址在给定时间段内可以发送的请求数量进行了限制。在这种情况下,一个IP地址被允许每秒发送10个请求,但在被限制之前可以突发20个请求。nodelay参数意味着请求不会被排队,而是立即用一个错误代码拒绝。你可以根据你的需要来调整这些值。

最后,为了阻止一个超过允许请求数量的IP地址,你可以在http块中使用deny指令,像这样。

http {
      # limit_req_zone and server configuration as above

          # block IP addresses that exceed the allowed number of requests
              deny 1.2.3.4;
      }
  

用你想封锁的IP地址替换1.2.3.4。你可以添加多个拒绝指令来阻止多个IP地址。

通过这种配置,任何发送超过允许数量的请求的IP地址将立即被拒绝,并有一个错误代码,如果配置了,则通过deny指令被阻止。

但这个配置足以在超过限制时自动拒绝。为了自动拒绝来自同一IP地址的api请求,你需要使用ngx_http_limit_conn_module模块来自动拒绝任何超过配置限制的连接。下面是如何配置的。

http {
      limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;

      server {
                # server configuration
                        location / {
                                      limit_conn conn_limit_per_ip 10;
                                      # other directives
                        }
      }
}

在上面的代码中,limit_conn_zone设置了一个名为 "conn_limit_per_ip "的共享内存区,可容纳10兆字节的数据。这一行应该被添加到http块中。

接下来,在定位块中,limit_conn设置了一个IP地址与服务器的连接数的限制。在这种情况下,一个IP地址最多允许与服务器建立10个连接。如果一个IP地址超过了这个限制,任何其他的连接尝试将被自动拒绝。

你可以根据自己的需要调整limit_conn指令中的数值。

最后,为了自定义连接被拒绝时显示的错误信息,你可以在http块中添加以下代码。

http {
      # limit_conn_zone and server configuration as above

          error_page 503 /error503.html;
           location = /error503.html {
               internal;
               return 503 "Service temporarily unavailable";
      }
}

在这段代码中,error_page为503错误代码设置了一个自定义的错误页面,当连接被拒绝时就会显示。然后,location块指定了错误页面的内容。

对nginx配置文件进行修改后,保存该文件,并通过运行以下命令重新加载nginx配置。

sudo systemctl reload nginx

#信息安全##网络#

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。