Zum Inhalt

redis-rate-limit: Redis-unterstütztes Ratenlimit-Modul für Nginx

Installation

Sie können dieses Modul in jeder RHEL-basierten Distribution installieren, einschließlich, aber nicht beschränkt auf:

  • RedHat Enterprise Linux 7, 8, 9 und 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 und 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

Aktivieren Sie das Modul, indem Sie Folgendes am Anfang von /etc/nginx/nginx.conf hinzufügen:

load_module modules/ngx_http_rate_limit_module.so;

Dieses Dokument beschreibt nginx-module-redis-rate-limit v1.0.0, veröffentlicht am 16. Juli 2022.


CI-Status

Ein Redis-unterstütztes Ratenlimit-Modul für Nginx-Webserver.

Diese Implementierung basiert auf dem folgenden Redis-Modul:

Das eine einfache Implementierung des recht anspruchsvollen generischen Zellratenalgorithmus in 130 Zeilen C ohne externe Abhängigkeiten bietet.

Synopsis

upstream redis {
   server 127.0.0.1:6379;

   # Oder: server unix:/var/run/redis/redis.sock;

   # ein Pool mit maximal 1024 Verbindungen
   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;
}

Hier gehen wir davon aus, dass Sie Nginx unter /opt/nginx/ installieren.

./configure --prefix=/opt/nginx \ --add-module=rate-limit-nginx-module/

make -j$(nproc) make install

## Testsuite

Die folgenden Abhängigkeiten sind erforderlich, um die Testsuite auszuführen:

* Nginx-Version >= 1.9.11

* Perl-Module:
    * [Test::Nginx](https://metacpan.org/pod/Test::Nginx::Socket)

* Nginx-Module:
    * ngx_http_rate_limit_module (d.h. dieses Modul)

* Redis-Module:
    * [redis-rate-limiter](https://github.com/onsigntv/redis-rate-limiter)

* Anwendungen:
    * redis: hört auf dem Standardport 6379.

Um die gesamte Testsuite im Standard-Testmodus auszuführen:
```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

Um spezifische Testdateien auszuführen:

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

Um einen bestimmten Testblock in einer bestimmten Testdatei auszuführen, fügen Sie die Zeile --- ONLY zu dem Testblock hinzu, den Sie ausführen möchten, und verwenden Sie dann das prove Utility, um diese .t-Datei auszuführen.

GitHub

Sie finden möglicherweise zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-redis-rate-limit.