redis-rate-limit: Módulo de limite de taxa baseado em Redis para Nginx
Instalação
Você pode instalar este módulo em qualquer distribuição baseada em RHEL, incluindo, mas não se limitando a:
- RedHat Enterprise Linux 7, 8, 9 e 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 e Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-redis-rate-limit
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-redis-rate-limit
Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:
load_module modules/ngx_http_rate_limit_module.so;
Este documento descreve o nginx-module-redis-rate-limit v1.0.0 lançado em 16 de julho de 2022.
Um módulo de limite de taxa baseado em Redis para servidores web Nginx.
Esta implementação é baseada no seguinte módulo Redis:
Que oferece uma implementação direta do sofisticado algoritmo de taxa de célula genérica, em 130 linhas de C, sem dependências externas.
Sinopse
upstream redis {
server 127.0.0.1:6379;
# Ou: server unix:/var/run/redis/redis.sock;
# um pool com no máximo 1024 conexões
keepalive 1024;
}
geo $limit {
default 1;
10.0.0.0/8 0;
192.168.0.0/24 0;
}
map $limit $limit_key {
0 "";
1 $remote_addr;
}
rate_limit_status 429;
location = /limit {
rate_limit $limit_key requests=15 period=1m burst=20;
rate_limit_pass redis;
}
location = /limit_b {
rate_limit $limit_key requests=20 period=1m burst=25;
rate_limit_prefix b;
rate_limit_pass redis;
}
location = /quota {
rate_limit $limit_key requests=15 period=1m burst=20;
rate_limit_quantity 0;
rate_limit_pass redis;
rate_limit_headers on;
}
Aqui assumimos que você instalaria seu nginx em /opt/nginx/.
./configure --prefix=/opt/nginx \ --add-module=rate-limit-nginx-module/
make -j$(nproc) make install
## Conjunto de testes
As seguintes dependências são necessárias para executar o conjunto de testes:
* Versão do Nginx >= 1.9.11
* Módulos Perl:
* [Test::Nginx](https://metacpan.org/pod/Test::Nginx::Socket)
* Módulos Nginx:
* ngx_http_rate_limit_module (ou seja, este módulo)
* Módulos Redis:
* [redis-rate-limiter](https://github.com/onsigntv/redis-rate-limiter)
* Aplicações:
* redis: escutando na porta padrão, 6379.
Para executar todo o conjunto de testes no modo de teste padrão:
```bash
cd /path/to/rate-limit-nginx-module
export PATH=/path/to/your/nginx/sbin:$PATH
prove -I/path/to/test-nginx/lib -r t
Para executar arquivos de teste específicos:
cd /path/to/rate-limit-nginx-module
export PATH=/path/to/your/nginx/sbin:$PATH
prove -I/path/to/test-nginx/lib t/sanity.t
Para executar um bloco de teste específico em um arquivo de teste particular, adicione a linha
--- ONLY ao bloco de teste que você deseja executar e, em seguida, use a utilidade prove para executar esse arquivo .t.
GitHub
Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório GitHub do nginx-module-redis-rate-limit.