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
директива (или обратная).