Политики трафика
Обзор
Функция позволяет описать правила и действия обработки трафика для входящих запросов и более гибко настроить взаимодействие с вашим приложением.
Доступно только по подписке в тарифе Команда.
Чтобы понять, зачем нужны политики и как они работают, разберём пример включения базовой авторизации только для префикса /admin
:
---
rules:
- name: Authorization for admin panel
expressions:
- req.URL.Path contains "/admin"
actions:
- name: Enable basic auth
type: basic_auth
config:
userList:
admin: password
Тут описано 1 правило(rules), в нём есть выражение(expressions), оно содержит условие в котором мы проверяем, что запрос предназначается для префикса /admin
, если условие истинно, наступает действие(actions), в примере мы применяем базовую авторизацию, задаём список из пар username
, password
. Если пользователь проходит авторизацию, то далее трафик направляется к вашему сервису. Это правило позволит вам открыть доступ к разрабатываемому сайту для всех, например для заказчиков или коллег, но при этом вы можете запретить доступ к приватным частям сайта. Это лишь один пример, нижу вы найдёте полное описание и больше живых примеров.
Чтобы вам было проще написать нужное правило мы добавили отладчик прямо в личном кабинете, там вы можете проверить корректно ли работает правило, а так же приведено несколько примеров:

Правила (rules)
Правила состоят из действий - actions
(обязательно), которые должны вступить в силу и выражений - expressions
(не обязательно), фильтрующих трафик, к которому они применяются. Правила оцениваются и выполняются последовательно в порядке их описания, без прерывания их выполнения. Т.е. если запрос подпадает сразу под несколько правил, то все действия также будет применены к данному запросу. Также можно указать имя name
. Описание правил хранится в файле .tuna.yml
в текущем каталоге, в YAML формате. Путь к файлу можно переопределить с помощью флага --policy-file
или переменной окружения TUNA_POLICY_FILE
.
Например существует 2 правила. В первом мы включаем базовую авторизацию для всех запросов к префиксу /admin
.
Во втором проверяем есть ли заголовок Accept-Language
и присутствует ли в нём русский язык ru-RU
. Клиент сначала должен будет ввести username и password, а далее сработает запрет по заголовку Accept-Language
если в значении заголовка есть ru-RU
.
---
rules:
- expressions:
- req.URL.Path contains "/admin"
actions:
- type: basic_auth
config:
userList:
admin: admin
- expressions:
- any(req.Headers["Accept-Language"], {# matches "ru-RU"})
actions:
- type: deny
Выражения (expressions)
Сайт с описанием синтаксиса expr-lang
Выражения основаны на синтаксисе expr-lang. Это богатый язык с множеств ом функций, операциями сравнения, вхождения, работы с строками и многим другим. Перечисление выражений в списке воспринимается как логическое И (and
).
Пример блокировки POST
запросов от ботов:
---
rules:
- expressions:
- lower(req.UserAgent) matches "(chatgpt-user|gptbot)"
- req.Method in ["POST"]
actions:
- type: deny