limit_req в nginx режет частоту запросов прямо на уровне веб-сервера — без iptables и без отдельного WAF.
http {
# зона на 10 МБ, лимит — 10 запросов/сек на каждый IP
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
server {
location /api/ {
limit_req zone=api burst=20 nodelay;
limit_req_status 429;
proxy_pass http://backend;
}
}
}
burst=20 — разрешает кратковременный всплеск в 20 запросов сверх лимита, nodelay — не ставит их в очередь, а пропускает сразу или режет. Без nodelay лишние запросы притормозятся, а не отклонятся.
Для защиты от брутфорса логина — отдельная зона с более жёстким rate=1r/s только на /login, основной трафик она не трогает.
#nginx #network #sysadmin
