nginx: limit_req без боли для легитимных пользователей

2 августа 2026 · nginx

Классическая история: бот перебирает пароли на /wp-login.php, а сайт ложится у всех. Простое решение — limit_req, но его легко настроить так, что пострадают живые люди за CGNAT мобильного оператора.

limit_req_zone $binary_remote_addr zone=login:10m rate=10r/m;
location = /wp-login.php {
    limit_req zone=login burst=5 nodelay;
    limit_req_status 429;
    include fastcgi_params; fastcgi_pass php;
}

burst даёт небольшой запас на всплеск, nodelay не заставляет ждать первые запросы. Для статических путей лимит не нужен вовсе — не ставьте его на location /.

← ко всем заметкам