如何使用Ngnix阻止机器人访问你的API?

我们都知道,今天的互联网充满了机器人,他们从客户端使用刮擦或服务器端通过请求我们的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

#信息安全##网络#

本文来自于头条号作者:吉祥庄钢铁侠,本站旨在传播优质文章,无商业用途。

本站部分文章来自网络或用户投稿,如无特殊说明或标注,均为本站原创发布。涉及资源下载的,本站旨在共享仅供大家学习与参考,如您想商用请获取官网版权,如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
投稿

如何在Nginx中获得客户的IP地址

2023-2-19 17:43:58

投稿

如何在Nginx中配置安全头信息

2023-2-19 17:44:01

搜索