Регистрация IP-адресов с ограниченной скоростью nginx в определенном файле

Регистрация IP-адресов с ограниченной скоростью nginx в определенном файле

Я ищу подход к синхронизации IP-адресов с ограничением скорости между узлами nginx. Я хочу регистрировать эти IP-адреса, а затем помещать их в базу данных и разрабатывать агента для обновления заблокированных IP-адресов в файлах конфигурации nginx.

Моя задача — найти способ ограничить IP-адреса nginx с помощью 429кода статуса.

Итак, возможно ли регистрировать IP-адреса с ограниченной скоростью в определенном файле в nginx или вы предлагаете какой-либо другой подход для синхронизации IP-адресов с ограниченной скоростью между узлами?

решение1

Да, вы можете это сделать, и подобный пример есть даже вдокументация nginx.

Директива access_logтакже принимает необязательный if=параметр, который оценивает переменные, переданные ей, и регистрирует только если результат не равен 0 или пустой строке. В сочетании с тем фактом, что access_logна уровне может быть больше одного параметра, вы можете регистрировать по-разному в зависимости от ваших потребностей.

Однако сначала вам понадобится mapсоставить картуСтатус HTTP-ответавас интересует переменная. Помните, что она mapдолжна быть за пределами serverблока.

map $status $rate_limited {
    default 0;
    429     1;
}

Затем в соответствующем serverблоке вы объявите свой access_log.

access_log /var/log/nginx/rate_limited.log combined if=$rate_limited;

Помните, что любое появление access_logна одном уровне переопределяет все остальные с более высоких уровней, поэтому вам нужно будет скопировать (или лучше include) access_logдирективы с более высоких уровней, которые вы также хотите использовать.

Связанный контент