速率限制问题,服务器在压力下崩溃

时间:2019-04-24 00:11:38

标签: ajax nginx rate-limiting

我正在尝试使用NGINX创建一个有效的限速解决方案。当使用AJAX从控制台向API发出大量请求时,服务器将中断。

网站可用的mysite.com内容

limit_req_zone $binary_remote_addr zone=myzone:10m rate=5r/m;

server {

root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name www.mysite.com mysite.com;
#include /etc/php/7.2/fpm/php-fpm.conf;

location / {
  rewrite ^/$ /main/controllers/landing.php;
  try_files $uri $uri/ =404;

  limit_req zone=myzone burst=3;
}

location ~ \.php$ {
  include snippets/fastcgi-php.conf;
  fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}

location ~ /\.ht {
  deny all;
}

location ~ /main/models/api {
   limit_req                zone=myzone burst=5 nodelay;
   fastcgi_pass             unix:/var/run/php/php7.2-fpm.sock;
   fastcgi_param            SCRIPT_FILENAME $document_root$fastcgi_script_name;
   include                  fastcgi_params;
}

}

我运行的JavaScript触发AJAX

for(i=0; i<10000; i++){
     runAJAXreq(1);
 }

我预测在分钟内经过10个请求的示例后,它将返回503,但是它运行在20-30左右,然后返回大量500或504。当我运行for循环进行10,000个循环时100左右,则整个服务器将崩溃。我是要解决这个问题还是不了解NGINX的速率限制?我也将实际站点名称更改为mysite.com

我尝试了许多解决方案。最初,我尝试在API中实现速率限制,但这并不能减轻服务器上的负载。之后,我将服务器升级到更强大的版本(从1vCPU和1GB内存升级到4vCPU和8GB内存)。这些解决方案似乎都不起作用。

最终,我希望服务器可以拒绝对API的大量基本上是恶意的请求,但不会真正影响实际使用该网站的人(可以的一些错误)。谢谢您的宝贵时间。

0 个答案:

没有答案