Pular para conteúdo

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.


CI status

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.