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