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.
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.