Estou procurando uma abordagem para sincronizar IPs com taxa limitada entre nós nginx. Quero registrar esses IPs e depois colocá-los em um banco de dados e desenvolver um agente para atualizar IPs bloqueados em arquivos de configuração do nginx.
Meu desafio é encontrar uma maneira de limitar os IPs nginx com 429
código de status.
Então, é possível registrar IPs com taxa limitada em um arquivo específico no nginx ou você sugere alguma outra abordagem para sincronizar IPs com taxa limitada entre nós?
Responder1
Sim, você pode fazer isso, e um exemplo semelhante está até mesmo nodocumentação nginx.
A access_log
diretiva também usa um if=
parâmetro opcional que avalia as variáveis fornecidas a ela e registra apenas se o resultado não for 0 ou uma string vazia. Combinado com o fato de que você pode ter mais de um access_log
em um nível, você pode registrar de forma diferente com base em suas necessidades.
Primeiro, porém, você precisará map
mapear oStatus da resposta HTTPvocê está interessado em uma variável. Lembre-se que map
deve estar fora do server
bloco.
map $status $rate_limited {
default 0;
429 1;
}
Então, no server
bloco relevante, você declarará seu arquivo access_log
.
access_log /var/log/nginx/rate_limited.log combined if=$rate_limited;
Lembre-se de que qualquer aparência de access_log
um nível substitui todas as outras de níveis superiores, então você desejará copiar (ou melhor, include
) as access_log
diretivas de níveis superiores que você também deseja usar.