我们都知道,今天的互联网充满了机器人,他们从客户端使用刮擦或服务器端通过请求我们的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#信息安全##网络#
本文来自于头条号作者:吉祥庄钢铁侠,本站旨在传播优质文章,无商业用途。