Я пытаюсь создать эффективное решение для ограничения скорости с 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);
}
Я предсказал, что он вернет 503 после того, как пример 10 запросов пройдет в минуту, но вместо этого он работает около 20-30, а затем возвращает большое число 500 или 504. Когда я запускаю цикл for вместо 10000 циклов 100 или около того, тогда весь сервер ломается. Я правильно понял или не понимаю ограничения скорости с NGINX? Я также изменил название сайта на mysite.com
Я пробовал много решений. Сначала я пытался реализовать ограничение скорости в API, но это не уменьшило нагрузку на сервер. После этого я обновил сервер до более мощной версии (от 1vCPU с 1 ГБ памяти до 4vCPU с 8 ГБ памяти). Похоже, ни одно из этих решений не сработало.
В конечном счете, я хотел бы, чтобы сервер мог отклонять большое количество в основном вредоносных запросов к API, но не влиял бы на кого-то, кто фактически использует сайт (с некоторой ошибкой все в порядке). Спасибо за ваше время.