redis-rate-limit: Module de limitation de taux basé sur Redis pour Nginx
Installation
Vous pouvez installer ce module dans n'importe quelle distribution basée sur RHEL, y compris, mais sans s'y limiter :
- RedHat Enterprise Linux 7, 8, 9 et 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 et 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
Activez le module en ajoutant ce qui suit en haut de /etc/nginx/nginx.conf :
load_module modules/ngx_http_rate_limit_module.so;
Ce document décrit nginx-module-redis-rate-limit v1.0.0 publié le 16 juillet 2022.
Un module de limitation de taux basé sur Redis pour les serveurs web Nginx.
Cette implémentation est basée sur le module Redis suivant :
Qui offre une implémentation simple de l'assez sophistiqué algorithme de taux de cellule générique, en 130 lignes de C, sans dépendances externes.
Synopsis
upstream redis {
server 127.0.0.1:6379;
# Ou : server unix:/var/run/redis/redis.sock;
# un pool avec au maximum 1024 connexions
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;
}
Ici, nous supposons que vous installeriez votre nginx sous /opt/nginx/.
./configure --prefix=/opt/nginx \ --add-module=rate-limit-nginx-module/
make -j$(nproc) make install
## Suite de tests
Les dépendances suivantes sont requises pour exécuter la suite de tests :
* Version Nginx >= 1.9.11
* Modules Perl :
* [Test::Nginx](https://metacpan.org/pod/Test::Nginx::Socket)
* Modules Nginx :
* ngx_http_rate_limit_module (c'est-à-dire, ce module)
* Modules Redis :
* [redis-rate-limiter](https://github.com/onsigntv/redis-rate-limiter)
* Applications :
* redis : écoutant sur le port par défaut, 6379.
Pour exécuter l'ensemble de la suite de tests en mode de test par défaut :
```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
Pour exécuter des fichiers de test spécifiques :
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
Pour exécuter un bloc de test spécifique dans un fichier de test particulier, ajoutez la ligne
--- ONLY au bloc de test que vous souhaitez exécuter, puis utilisez l'utilitaire prove pour exécuter ce fichier .t.
GitHub
Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-redis-rate-limit.