Перейти к содержанию

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 года.


CI status

Модуль ограничения частоты запросов на основе 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.