redis-rate-limit: Módulo de límite de tasa respaldado por Redis para Nginx
Instalación
Puedes instalar este módulo en cualquier distribución basada en RHEL, incluyendo, pero no limitado a:
- RedHat Enterprise Linux 7, 8, 9 y 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 y 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
Habilita el módulo añadiendo lo siguiente en la parte superior de /etc/nginx/nginx.conf:
load_module modules/ngx_http_rate_limit_module.so;
Este documento describe nginx-module-redis-rate-limit v1.0.0 lanzado el 16 de julio de 2022.
Un módulo de límite de tasa respaldado por Redis para servidores web Nginx.
Esta implementación se basa en el siguiente módulo de Redis:
Que ofrece una implementación sencilla del bastante sofisticado algoritmo de tasa de celda genérica, en 130 líneas de C, sin dependencias externas.
Sinopsis
upstream redis {
server 127.0.0.1:6379;
# O: server unix:/var/run/redis/redis.sock;
# un grupo con un máximo de 1024 conexiones
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;
}
Aquí asumimos que instalarías tu nginx en /opt/nginx/.
./configure --prefix=/opt/nginx \ --add-module=rate-limit-nginx-module/
make -j$(nproc) make install
## Suite de pruebas
Las siguientes dependencias son requeridas para ejecutar la suite de pruebas:
* Versión de Nginx >= 1.9.11
* Módulos de Perl:
* [Test::Nginx](https://metacpan.org/pod/Test::Nginx::Socket)
* Módulos de Nginx:
* ngx_http_rate_limit_module (es decir, este módulo)
* Módulos de Redis:
* [redis-rate-limiter](https://github.com/onsigntv/redis-rate-limiter)
* Aplicaciones:
* redis: escuchando en el puerto predeterminado, 6379.
Para ejecutar toda la suite de pruebas en el modo de prueba predeterminado:
```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 ejecutar archivos de prueba 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 ejecutar un bloque de prueba específico en un archivo de prueba particular, añade la línea
--- ONLY al bloque de prueba que deseas ejecutar, y luego usa la utilidad prove para ejecutar ese archivo .t.
GitHub
Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de GitHub para nginx-module-redis-rate-limit.