redis-rate-limit: Модуль ограничения частоты на основе Redis для Nginx
Установка на Debian/Ubuntu
Эти документы относятся к APT пакету nginx-module-redis-rate-limit, предоставляемому репозиторием GetPageSpeed Extras.
- Настройте репозиторий APT, как описано в настройке APT репозитория.
- Установите модуль:
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 |
Модуль ограничения частоты на основе 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.