nginx: limit_req без боли для легитимных пользователей
Классическая история: бот перебирает пароли на /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 /.