Правила обработки запросов
В этой статье описан принцип работы сервиса Edge Logic Rules и его возможности.
Last updated
В этой статье описан принцип работы сервиса Edge Logic Rules и его возможности.
Last updated
Вы можете создавать и применять на Платформе правила для обработки запросов. В соответствии с этими правилами Платформа будет решать, предоставлять ли доступ к данным конечным пользователям, ограничивать его или нет. Также вы можете изменять заголовки запросов, перенаправлять запросы или менять политику кэширования.
Когда платформа обрабатывает запрос, она проверяет его на соответствие критериям, указанным в правилах обработки, которые входят в состав Набора правил.
Также вы можете создавать списки значений, содержащие IP-адреса, названия стран или текстовые строки. Эти списки можно применять в правилах для последующей обработки запросов.
Создавать Наборы правил и привязывать их к Сервисным конфигурациям можно в клиентском портале NGENIX Multidesk или с помощью NGENIX API. Для этого необходимо иметь в составе Аккаунта сервис Edge Logic Rules.
Вы можете управлять Наборами правил в клиентском портале NGENIX Mutidesk на странице Наборы правил обработки запросов (раздел Обработка запросов в боковом меню настроек Аккаунта).
Набор правил может содержать от 1 до 40 правил. Правила определяют критерии, при соблюдении которых будет выполнено одно или несколько действий.
Набор правил можно включить или выключить. В зависимости от этого обработка запросов по правилам данного Набора правил будет включена или отключена во всех Сервисных конфигурациях, к которым он привязан.
К одной Сервисной конфигурации можно привязать только один Набор правил, однако один и тот же Набор правил можно использовать для неограниченного количества Сервисных конфигураций.
Набор правил может находиться в двух состояниях: Используется или Не используется. Это зависит от того, привязан ли он хотя бы к одной Сервисной конфигурации.
В зависимости от содержания Набора правил Платформа автоматически присваивает ему категорию, которая влияет на стоимость проверки запросов, проходящих через этот Набор правил.
Каждый запрос обрабатывается правилами в Наборе правил последовательно, сверху вниз. Обработка запроса прекращается, если в каком-либо правиле выполняется терминирующее действие. Вы можете изменить порядок правил, переместив их в нужном порядке.
Каждое правило включает в себя критерии и действия. Действия выполняются только в том случае, если все критерии, описанные в правиле, выполнены.
Вы можете создавать копии правил и удалять их. Кроме того, у вас есть возможность отключить любое правило в Наборе правил.
В каждом критерии указывается поле, содержимое которого будет сравниваться с определённым значением при помощи оператора.
http.request.args.<argument_name> – аргумент запроса,
http.request.headers.<header_name> – HTTP-заголовок,
http.request.host – значение заголовка Host,
http.request.js_challenge_ok – результат JavaScript-валидации пользователя (true или false),
http.request.method – HTTP-метод (GET, HEAD, POST и т.п.),
http.request.origin.host – хост из заголовка Origin.
http.request.origin.scheme – схема из заголовка Origin,
http.request.path – путь к ресурсу без схемы, хоста, порта и аргументов,
http.request.port – порт (TCP),
http.request.rawuri – URI запроса,
http.request.referer.host – хост из заголовка Referer,
http.request.referer.scheme – схема из заголовка Referer,
http.request.scheme – схема (http или https),
http.version – версия протокола HTTP (HTTP/1.0, HTTP/1.1, HTTP/2.0 и т.п.),
ip.addr – IP-адрес,
ip.asn – номер автономной системы (AS),
ip.geoip.country – страна,
ip.network_type – принадлежность адреса к сетям хостинг-провайдеров,
ip.proxy_type – принадлежность адреса к сетям провайдеров сервисов VPN, Proxy, Tor,
tls.ngx_fingerprint_hash – значение TLS-fingerprint хэша,
tls.version – версия протокола TLS (TLSv1, TLSv1.1, TLSv1.2, TLSv1.3).
Например, чтобы создать критерий для User-Agent необходимо в Поле указать: http.request.headers.user-agent
Значение в Поле необходимо указывать в нижнем регистре.
Максимальное количество критериев в одном правиле: 5.
Можно выбрать следующие операторы сравнения, в зависимости от выбранного поля:
true – всегда верно,
equals – равно единственному Значению,
in – равно хотя бы одному из перечисленных Значений,
contains – содержится в любом из перечисленных Значений,
begins – начинается с любого из перечисленных Значений,
ends – заканчивается на любое из перечисленных Значений,
exists – присутствует.
Опционально вы можете выбрать модификатор запроса NOT
. В этом случае оператор сравнения инвертируется.
В правиле могут отсутствовать критерии. В этом случае действие будет выполняться для любого запроса.
Вы можете использовать список значений при создании критерия. Например, список стран, IP-префиксов и т.п.
Для некоторых типов Полей есть опция Учитывать регистр, по умолчанию она включена. При отключении этой опции (снятия галочки) регистр значений будет игнорироваться.
Например, если правило срабатывает при указанном значении SomeString
, то при отключенном учете регистра оно также будет срабатывать для значений Somestring
, someString
и т.п.
Действия описывают, каким образом поступать с запросом, если для него выполнены все критерии в правиле.
Доступны следующие действия:
allow – пропустить запрос,
deny – заблокировать запрос,
redirect – перенаправить запрос (3xx Redirect),
setHeader – установить(заменить) заголовок запроса,
delHeader – удалить заголовок запроса,
jsChallenge – произвести JavaScript-валидацию пользователя.
Действия allow, deny, redirect и jsChallenge являются терминирующими. Это означает, что после выполнения такого действия дальнейшая обработка запроса по следующим правилам прекращается.
Для действия deny также возможно указать текст сообщения для страницы-заглушки. Текст сообщений по умолчанию: Доступ к сайту временно ограничен владельцем веб-ресурса.
Для некоторых действий есть возможность указать дополнительные параметры.
Для действий setHeader и delHeader имя заголовка должно быть описано в специальном формате: http.request.headers.<header_name>
. Например, для заголовка User-Agent: http.request.headers.user-agent
Заголовкиx-real-ip
и x-forwarded-for
не могут быть использованы в условиях правил сервиса Edge Logic Rules, так как проставляются Платформой.
При выборе действий redirect и setHeader имеется возможность использовать переменные, что позволяет учитывать изменяющиеся значения исходного запроса. Например:
При необходимости перенаправления запроса на другой домен (example.com) можно использовать действие redirect на адрес example.com${http.request.rawuri}
где ${http.request.rawuri} - переменная со значением исходного пути запроса пользователя, включающая аргументы запроса.
При необходимости добавления заголовка, содержащего в себе информацию об автономной сети, из которой он пришел на Платформу, можно использовать действие setHeader и в качестве значения добавляемого кастомного заголовка указать переменную ${ip.asn}.
Для использования переменных в поле ввода наберите ${, выберите переменную из выпадающего списка и закройте скобки ( символом "}"). Список доступных переменных идентичен полям HTTP-запросов указанным в Поля HTTP-запроса пользователя.
Списки значений необходимы для перечисления большого количества объектов, таких как:
IPv4-адреса,
HTTP-методы,
страны,
строки,
ASN (номера автономных систем),
md5HashString (значения md5-хэша).
Вы можете использовать списки в критериях правил для тех или иных полей запроса.
Например, вы можете создать список доверенных IPv4-адресов, которые будут иметь доступ к панели администратора. В дальнейшем такой список можно использовать в большом количестве критериев разных правил.
Опция Учитывать регистр также применима при использовании списков.
Для сервиса Edge Logic Rules действуют следующие технические ограничения:
Действие
Параметры
allow
отсутствуют
deny
HTTP статус-код от 400 до 599, информационный текст для страницы-заглушки
redirect
Ссылка для перенаправления (можно использовать переменные),
HTTP статус-код (301, 302, 303, 307, 308)
delHeader
имя заголовка
setHeader
имя заголовка, содержимое заголовка (можно использовать переменные)
jsChallenge
TTL проверочных cookie (в секундах)
Сущность
Ограничение
Количество правил в наборе
40
Количество критериев в правиле
5
Количество действий в правиле
5
Размер списка стран
300
Размер списка строк
300
Размер списка префиксов
20000
Количество символов в значениях строк в списке
255