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

redis-rate-limit: Модуль ограничения частоты на основе Redis для Nginx

Установка на Debian/Ubuntu

Эти документы относятся к APT пакету nginx-module-redis-rate-limit, предоставляемому репозиторием GetPageSpeed Extras.

  1. Настройте репозиторий APT, как описано в настройке APT репозитория.
  2. Установите модуль:
sudo apt-get update
sudo apt-get install nginx-module-redis-rate-limit
Показать наборы и архитектуры
| Дистрибутив | Версия            | Компонент   | Архитектуры    |
|-------------|-------------------|-------------|-----------------|
| debian      | bookworm          | main        | amd64, arm64    |
| debian      | bookworm-mainline | main        | amd64, arm64    |
| debian      | trixie            | main        | amd64, arm64    |
| debian      | trixie-mainline   | main        | amd64, arm64    |
| ubuntu      | focal             | main        | amd64, arm64    |
| ubuntu      | focal-mainline    | main        | amd64, arm64    |
| ubuntu      | jammy             | main        | amd64, arm64    |
| ubuntu      | jammy-mainline    | main        | amd64, arm64    |
| ubuntu      | noble             | main        | amd64, arm64    |
| ubuntu      | noble-mainline    | main        | amd64, arm64    |

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.