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

发表时间:2023-08-14 11:54:01
0 0

我们都知道,今天的互联网充满了机器人,他们从客户端使用刮擦或服务器端通过请求我们的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_addrzone=mylimit:10mrate=10r/s;server{#serverconfigurationlocation/{limit_reqzone=mylimitburst=20nodelay;#otherdirectives}}}

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

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

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

http{#limit_req_zoneandserverconfigurationasabove#blockIPaddressesthatexceedtheallowednumberofrequestsdeny1.2.3.4;}

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

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

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

http{limit_conn_zone$binary_remote_addrzone=conn_limit_per_ip:10m;server{#serverconfigurationlocation/{limit_connconn_limit_per_ip10;#otherdirectives}}}

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

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

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

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

http{#limit_conn_zoneandserverconfigurationasaboveerror_page503/error503.html;location=/error503.html{internal;return503"Servicetemporarilyunavailable";}}

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

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

sudosystemctlreloadnginx

#信息安全##网络#

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

声明:本文图片、文字、视频等内容来源于互联网,本站无法甄别其准确性,建议谨慎参考,本站不对您因参考本文所带来的任何后果负责!本站尊重并保护知识产权,本文版权归原作者所有,根据《信息网络传播权保护条例》,如果我们转载内容侵犯了您的权利,请及时与我们联系,我们会做删除处理,谢谢。

全部评论 0条
请先登录发表后评论(·ω·)
表情
发表
1页,跳至

金币

主题
最新发表
返回顶部