Aller au contenu

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.


CI status

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.