Ограничение количества запросов (limit_req) по условию
Содержание |
Обзор
Модуль limit_req в SEnginx основан на модуле limit_req из версии nginx от tengine. Модуль limit_req в SEnginx расширяет оригинальный модуль limit_req nginx функциями: действие при превышении лимита, условие применения ограничения и белый список IP-адресов.
SEnginx добавляет новый параметр, который запускает limit_req только, если имеет значение "истина". Расширенный limit_req module может использоваться вместе с модулями HTTP Robot Mitigation и IP Access Behavior Module для того, чтобы иметь больше стратегий ограничения количества запросов и защиты от ddos-атак.
Эта функциональность доступна начиная с версии 1.5.10.
Директивы
limit_req
Синтаксис | limit_req zone=zone_name [burst=burst] [forbid_action=action] [nodelay] [condition=$cond]; |
Контекст | http, server, location |
Новый параметр "forbid_action" указывает URL для редиректа если количество запросов превышает лимит зоны. forbid_action может быть именованным location.
Правило limit_req активно, если новый параметр "condition" имеет значение "истина". В противном случае правило limit_req не применяется.
limit_req_whitelist
Синтаксис | limit_req_whitelist geo_var_name=var_name geo_var_value=var_value; |
Контекст | http, server, location |
Определяет белый список IP-адресов для обхода ограничения limit_req.
'geo_var_name' это имя переменной, определенной с помощью директивы geo, а 'geo_var_value' ее значение. Например:
geo $local_ip { ranges; default 0; 127.0.0.1-127.0.0.255 1; } limit_req_whitelist geo_var_name=local_ip geo_var_value=1;
Пример конфигурации
Применить ограничение количества запросов к чувствительному ресурсу.
Смотрите также: IP Access Behavior Module
limit_req_zone $binary_remote_addr $request_uri zone=cc:10m rate=3r/s; ... location ~ /bbs/.*\.php { ip_behavior_sensitive; set $cond 0; ifall ($insensitive_percent >= 0) ($insensitive_percent <= 30) { set $cond 1; } limit_req zone=cc burst=3 forbid_action=@process condition=$cond; proxy_pass http://backend; } location @process { ns_layer_force_run; robot_mitigation on; robot_mitigation_blacklist 5; proxy_pass http://backend; }