Китаезы атакуют, баню всю страну и все хорошо, никакого ддоса нет, но есть же и нормальные люди которые ищут информацию какую то на сайте, к тому же для них даже языковая версия имеется. Как только бан снимаю в nft, так через день другой опять начинают ддосить сервер запросами.
Реально ли сделать limit_zone именно для страны?
Сейчас к примеру имеются следующие настройки лимитирующие запросы по IP, но в случае ддоса они бесполезны.
limit_req_zone $binary_remote_addr zone=auth:10m rate=35r/s;
limit_req zone=auth burst=60 delay=35;
limit_req_log_level warn;
limit_req_status 429;
У меня два вопроса к знающим людям:
1. А можно ли вместо $binary_remote_addr указать локаль в браузере? Если что сайт автоматом создает куку с локалью locale=zh, но думаю она бесполезна в случае ддоса, к тому же и куки могут быть отключены. Может быть есть какие то стандартные переменные в nginx с помощью которых можно узнать есть ли в заголовке браузера информация что у пользователя язык выставлен "zh"?
2. Если с первым все можно сделать, то возможно ли в одном блоке server указать два лимита?
К примеру как то так
В кофиге
limit_req_zone $binary_remote_addr zone=auth:10m rate=35r/s;
limit_req_zone $LOCALE_ZH zone=zh_limit:10m rate=10r/s;
А в блоке server
limit_req zone=auth burst=60 delay=35;
limit_req zone=zh_limit burst=20 delay=10;
limit_req_log_level warn;
limit_req_status 429;
По факту хочется сделать следующее, если у пользователя стоит локаль zh, просто ставим его сразу в очередь и пусть ждет своего часа.
К слову, сервер на который идет ддосс выдерживает, с ним все хорошо, проблема в сервере на котором размещена база данных, очень много запросов поступает на нее, и она крашится от нехватки памяти. В боевых условиях вся эта связка выдерживает 200к в сутки, но вот всплески трафика от ддоса выдержать она не в силах.