redis-rate-limit: Модуль ограничения частоты запросов на основе Redis для Nginx
Установка
Вы можете установить этот модуль в любой дистрибутив на базе RHEL, включая, но не ограничиваясь:
- RedHat Enterprise Linux 7, 8, 9 и 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 и 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
Включите модуль, добавив следующее в начало файла /etc/nginx/nginx.conf:
load_module modules/ngx_http_rate_limit_module.so;
Этот документ описывает nginx-module-redis-rate-limit v1.0.0, выпущенный 16 июля 2022 года.
Модуль ограничения частоты запросов на основе Redis для веб-серверов Nginx.
Эта реализация основана на следующем модуле Redis:
Который предлагает простую реализацию довольно сложного алгоритма ограничения частоты запросов в 130 строках C, без внешних зависимостей.
Синопсис
upstream redis {
server 127.0.0.1:6379;
# Или: server unix:/var/run/redis/redis.sock;
# пул с максимум 1024 соединениями
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;
}
Здесь мы предполагаем, что вы установите nginx в /opt/nginx/.
./configure --prefix=/opt/nginx \ --add-module=rate-limit-nginx-module/
make -j$(nproc) make install
## Набор тестов
Следующие зависимости необходимы для запуска набора тестов:
* Версия Nginx >= 1.9.11
* Модули Perl:
* [Test::Nginx](https://metacpan.org/pod/Test::Nginx::Socket)
* Модули Nginx:
* ngx_http_rate_limit_module (т.е. этот модуль)
* Модули Redis:
* [redis-rate-limiter](https://github.com/onsigntv/redis-rate-limiter)
* Приложения:
* redis: слушает на порту по умолчанию, 6379.
Чтобы запустить весь набор тестов в режиме по умолчанию:
```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
Чтобы запустить конкретные тестовые файлы:
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
Чтобы запустить конкретный блок тестов в определенном тестовом файле, добавьте строку
--- ONLY в блок тестов, который вы хотите запустить, а затем используйте утилиту prove для запуска этого .t файла.
GitHub
Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-redis-rate-limit.