loop-detect: Поддержка заголовка CDN-Loop для предотвращения циклов запросов
Установка для Debian/Ubuntu
Эти документы относятся к APT пакету nginx-module-loop-detect, предоставляемому репозиторием GetPageSpeed Extras.
- Настройте репозиторий APT, как описано в настройке репозитория APT.
- Установите модуль:
sudo apt-get update
sudo apt-get install nginx-module-loop-detect
Показать наборы и архитектуры
| Дистрибутив | Версия | Компонент | Архитектуры |
|-------------|-------------------|-------------|----------------|
| 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 |
ngx_http_loop_detect_module позволяет NGINX использовать заголовок CDN-Loop для предотвращения циклов запросов.
Содержание
- Имя
- Содержание
- Статус
- Сводка
- Установка
- Директивы
- loop_detect
- loop_detect_cdn_id
- loop_detect_status
- loop_detect_max_allow_loops
- Переменные
- $loop_detect_current_loops
- $loop_detect_proxy_add_cdn_loop
- Как это работает
- Автор
- Лицензия
Статус
Этот модуль Nginx в настоящее время считается экспериментальным. Проблемы и запросы на изменение приветствуются, если вы столкнетесь с какими-либо проблемами.
Сводка
http {
# Включите модуль в блоке location
loop_detect on;
loop_detect_cdn_id my_cdn_id;
loop_detect_status 508;
loop_detect_max_allow_loops 10;
server {
listen 80;
server_name example.com;
location / {
proxy_set_header CDN-Loop $loop_detect_proxy_add_cdn_loop;
proxy_pass http://example.upstream.com;
}
}
}
Директивы
loop_detect
Синтаксис: loop_detect on | off;
По умолчанию: loop_detect off;
Контекст: http, server, location
Включает или отключает обнаружение циклов для текущей области. При включении модуль проверяет заголовок CDN-Loop для отслеживания количества пересылок и блокирует запросы, превышающие допустимый предел.
loop_detect_cdn_id
Синтаксис: loop_detect_cdn_id string;
По умолчанию: loop_detect_cdn_id openresty;
Контекст: http, server, location
Устанавливает уникальный идентификатор для ваших кластеров. Этот идентификатор используется для анализа и отслеживания циклов в заголовке CDN-Loop.
loop_detect_status
Синтаксис: loop_detect_status code;
По умолчанию: loop_detect_status 508;
Контекст: http, server, location
Устанавливает код статуса HTTP, который возвращается, когда запрос превышает допустимый предел цикла. Код должен быть между 400 и 599 (ошибки клиента или сервера).
loop_detect_max_allow_loops
Синтаксис: loop_detect_max_allow_loops number;
По умолчанию: loop_detect_max_allow_loops 10;
Контекст: http, server, location
Устанавливает максимальное количество допустимых циклов перед блокировкой запроса. Число должно быть больше 0.
Переменные
$loop_detect_current_loops
Возвращает текущее количество обнаруженных циклов, извлеченное из заголовка CDN-Loop. Это значение представляет собой количество пересылок, через которые уже прошел ваш запрос.
$loop_detect_proxy_add_cdn_loop
Конструирует новое значение заголовка CDN-Loop, которое будет отправлено вниз по цепочке прокси. Это значение включает:
- Идентификатор текущего узла CDN и увеличенный счетчик циклов (например,
my_cdn; loops=2). - Остальные записи из оригинального заголовка
CDN-Loop(если имеются).
Пример использования:
location / {
proxy_set_header CDN-Loop $loop_detect_proxy_add_cdn_loop;
proxy_pass http://backend;
}
Как это работает
-
Обнаружение: Модуль разбирает заголовок
CDN-Loop, чтобы определить количество пересылок. Каждая пересылка форматируется как: Формат:Cdn-Loop: <cdn_id>; loops=<count>, ...Пример:Cdn-Loop: my_cdn; loops=2, another_cdn; loops=1. -
Отслеживание: Текущее количество пересылок (current_loops) извлекается из заголовка. Модуль увеличивает счетчик и конструирует новое значение
CDN-Loopдля прокси ниже по цепочке. -
Блокировка: Если обнаруженное количество циклов превышает
loop_detect_max_allow_loops, NGINX возвращает настроенныйloop_detect_status(например, 508).