Я ищу подход к синхронизации 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
директивы с более высоких уровней, которые вы также хотите использовать.