Настройки плагинов для правил

Плагин — подключаемый модуль, реализующий расширенную логику, которая применяется между отправкой HTTP-запроса и получением ответа. Конфигурация плагина привязывается к правилу.

Плагины могут быть привязаны только к конкретному правилу и модифицируют выполнение только тех запросов, которые соответствуют настройкам правила. К каждому правилу могут быть привязаны все доступные плагины, но только по одному каждого типа.

Чтобы настроить плагин:

  1. Выберите плагин или плагины из списка.

  2. Укажите параметры выбранных плагинов (наборы полей зависят от выбранного типа плагина).

    Список доступных плагинов зависит от выбранного типа правила.

    Тип плагина

    Mock API

    Маршрутизация запросов

    Разделение трафика

    Перенаправление запросов (Redirect)

    Ограничение числа запросов

    -

    +

    +

    -

    Перезапись ответа

    +

    +

    +

    -

    Кеширование запросов (Preview)

    -

    +

    -

    -

    Базовая авторизация

    -

    +

    +

    -

    Авторизация по API-ключам

    -

    +

    +

    -

    Авторизация через IAM

    -

    +

    +

    -

    Совместное использование ресурсов (CORS)

    +

    +

    +

    -

  3. Нажмите Создать.

Важно

Использовать можно только включенное правило.

Ограничение числа запросов

Сценарий использования

Ограничить количество запросов, отправляемых по определенному URI в единицу времени, чтобы избежать DDoS-атаки.

Поля для заполнения
  • Количество запросов — максимальное количество запросов, которое может быть обработано в единицу времени.

  • Интервал времени — время в секундах, в течение которого действует счетчик количества запросов. При достижении указанного значения, счетчик максимального количества запросов обнуляется.

  • Код ответа на отклоненный запрос — код ответа HTTP, который следует возвращать, когда запрос отклоняется из-за превышения лимита. Может быть установлен любой код ответа от 200 до 599. При отсутствии значения возвращается 503.

Заголовки успешно выполненных запросов содержат следующую информацию:

  • X-RateLimit-Limit — установленный в плагине лимит запросов.

  • X-RateLimit-Remaining — оставшееся количество запросов, которые могут быть приняты до обнуления счетчика.

Пример успешно обработанного запроса

Ответ содержит следующий заголовок:

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 13175
Connection: keep-alive
X-RateLimit-Limit: 2
X-RateLimit-Remaining: 1
Server: APISIX web server

Таким образом, в настройках установлен лимит в количестве 2 запросов за интервал времени. До сброса счетчика доступна обработка еще одного запроса.

Пример запроса, отклоненного из-за превышения лимита на количество запросов за указанный интервал

HTTP/1.1 503 Service Temporarily Unavailable
Content-Type: text/html
Content-Length: 194
Connection: keep-alive
Server: APISIX web server

<html>
<head><title>503 Service Temporarily Unavailable</title></head>
<body>
<center><h1>503 Service Temporarily Unavailable</h1></center>
<hr><center>openresty</center>
</body>
</html>

Перезапись ответа

Сценарий использования

Изменить информацию, получаемую в ответе от целевого хоста: набор заголовков, код ответа или тело ответа.

Поля для заполнения
  • Новый код ответа — код ответа HTTP, которым заменяется получаемый код. Может быть установлен любой код ответа от 200 до 599. При отсутствии значения код ответа не модифицируется.

  • Новое тело ответа — тело ответа, возвращаемое при перезаписи. При отсутствии значения тело ответа не модифицируется.

  • Кодировать тело ответа в base64 — возвращать ответ в кодировке base64.

  • Заголовок — заголовок, который нужно модифицировать при возврате ответа. Добавить новую пару заголовка и значения можно кнопкой Добавить заголовок.

  • Значение — значение, которое будет передано в соответствующем заголовке при возврате ответа. Добавить новую пару заголовка и значения можно кнопкой Добавить заголовок.

Кеширование запросов (Preview)

Сценарий использования

Кешировать ответы от целевого хоста в течение определенного интервала времени и возвращать ответы из кеша. Это позволяет снизить нагрузку на целевой хост.

Поля для заполнения
  • Перечень кодов ответа — коды ответов HTTP, при которых следует кешировать ответы. Оставьте поле пустым, если требуется кешировать все ответы.

  • Время жизни кеша — время (в секундах), в течение которого кешированный ответ следует удалить при отсутствии повторных запросов.

Базовая авторизация

Сценарий использования

Запрашивать аутентификацию при отправке запросов к шлюзу. Доступ предоставляется только заданным пользователям, у которых в качестве способа авторизации используется пара логин-пароль.

Поля для заполнения
  • Авторизовать всех пользователей API-шлюза — обрабатывать запросы всех зарегистрированных пользователей, обладающих парами логин-пароль. Если опция выключена, обрабатываются только запросы пользователей, указанных в группе полей Пользователь.

  • Пользователь — список зарегистрированных пользователей, которым предоставляется доступ.

    Для каждого добавленного пользователя можно:

    • отобразить логин и пароль (Показать);

    • скрыть отображение логина и пароля (Скрыть);

    • скопировать значение логина и пароля (Копировать).

  • Не передавать авторизационные заголовки в целевой хост — удалять из запросов к целевому хосту заголовки, содержащие авторизационные данные. Если опция отключена, данные передаются без изменений.

Если этот плагин и/или другие способы авторизации не подключены, будет обработан запрос любого неавторизованного пользователя к шлюзу API.

Авторизация по API-ключам

Сценарий использования

Запрашивать аутентификацию при отправке запросов к шлюзу. Доступ предоставляется только заданным пользователям, у которых в качестве способа авторизации используется API-ключ.

Поля для заполнения
  • Авторизовать всех пользователей API-шлюза — обрабатывать запросы всех пользователей, обладающих созданными API-ключами. Если опция выключена, обрабатываются только запросы от пользователей, указанных в следующей группе полей.

  • Пользователь — список зарегистрированных пользователей, которым предоставляется доступ на отправку запросов. Для каждого добавленного пользователя можно:

    • отобразить API-ключ (Показать);

    • скрыть отображение API-ключа (Скрыть);

    • скопировать значение API-ключа (Копировать).

    Удалить данные пользователя и тем самым заблокировать доступ можно кнопкой Иконка удаления.

  • Не передавать авторизационные заголовки в целевой хост — удалять заголовки, содержащие авторизационные данные, из запросов к целевому хосту. Если опция отключена, данные передаются без изменений.

Если этот плагин и/или другие способы авторизации не подключены, будет обработан запрос любого неавторизованного пользователя к шлюзу API.

Авторизация через IAM

Сценарий использования

Запрашивать аутентификацию при отправке запросов к шлюзу. Доступ предоставляется пользователям, которые в качестве способа авторизации используют IAM-токен.

Для авторизации можно использовать как персональный IAM-токен, так и токен сервисного аккаунта.

Поля для заполнения
  • (опционально) Код неуспешной авторизации — заполняется, если нужно задать код, отличающийся от стандартного кода 403.

  • (опционально) Сообщение неуспешной авторизации — заполняется, если нужно показывать сообщение в случае неуспешной авторизации.

Совместное использование ресурсов (CORS)

Плагин для реализации механизма доступа к ресурсам другого домена (Cross-Origin Resource Sharing).

Поля для заполнения
  • Настройка разрешений — активировать поля для тонкой настройки разрешений. Если опция выключена, прочие опции недоступны — по умолчанию разрешены все ресурсы.

  • Разрешить источники — список источников (через запятую), для которых разрешен CORS. Формат указания одного источника: scheme://host:port.

    Если опция Разрешить Credentials выключена, можно включить CORS для всех источников, указав в поле значение «*».

  • Разрешить HTTP-методы — список HTTP-методов (через запятую), для которых разрешен CORS. Примеры значений: «POST», «GET».

    Если опция Разрешить Credentials выключена, можно включить CORS для всех методов, указав в поле значение «*».

  • Разрешить заголовки запроса — список заголовков запросов (через запятую), разрешенные при доступе к CORS-ресурсу.

    Если опция Разрешить Credentials выключена, можно включить CORS для всех всех заголовков запросов, указав в поле значение «*».

  • Разрешить заголовки ответа — список заголовков ответов (через запятую), разрешенных при доступе к CORS-ресурсу.

    Если опция Разрешить Credentials выключена, можно включить CORS для всех заголовков, указав в поле значение «*».

  • Разрешить Credentials — разрешить включать в запросы credentials (например, cookies).