NGINX - дроссельные запросы для предотвращения злоупотреблений

Причина, по которой я хочу это сделать, заключается в том, что пользователи разрабатывают против нашего API с помощью JavaScript, а некоторые разработчики облажаются и заставляют посетителей захлопывать сервер с помощью запросов AJAX. Когда это происходит, я хочу иметь возможность регулировать запросы API, возможно, до 50 запросов в минуту, или что-то в этом роде.

Примечание: (в частности, ресурсоемкие ресурсы БД, поэтому, возможно, на уровне пути, а не для всего сервера (например, throttle "/json_api/", но не "/static/").

1 ответ

Решение

Это можно сделать с помощью LimitReqModule с Nginx. Однако, если это для обратного прокси, вы можете попробовать новое ограничение скорости, поддерживаемое HAProxy.

Я обнаружил, что ограничение скорости nginx немного сбивает с толку, чтобы получить точную скорость, которую вы хотите.

Но у вас есть что-то вроде:

limit_req_zone  $binary_remote_addr  zone=default:10m   rate=50r/m;

в http раздел, а затем что-то вроде следующего в location раздел в server раздел:

limit_req zone=default burst=10 nodelay;

Чтобы не было для определенного раздела типа /static Вы бы просто сделать это отдельным location и не включать это limit_req директива (или обратная).

Другие вопросы по тегам