Справочник по настройке прокси-сервера API

Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee
X.info

Как разработчик, работающий с Apigee Edge, ваша основная задача — настройка API-прокси, которые функционируют как прокси для API или бэкэнд-сервисов. Этот документ является справочником по всем элементам конфигурации, доступным вам при создании API-прокси.

Если вы изучаете создание API-прокси, рекомендуется начать с темы «Создание простого API-прокси» .

Наиболее распространенные способы редактирования конфигураций прокси-сервера:

Локальная разработка конфигураций прокси-сервера

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

В этом разделе описывается, как с помощью пользовательского интерфейса загрузить существующую конфигурацию прокси-сервера, отредактировать ее, а затем загрузить обратно в Edge для развертывания. Вы также можете использовать apigeetool для загрузки и развертывания новой конфигурации прокси-сервера (с помощью команд fetchproxy и deployproxy соответственно).

Чтобы отредактировать конфигурацию прокси локально с помощью пользовательского интерфейса:

  1. Загрузите текущую конфигурацию прокси-сервера в пользовательском интерфейсе Edge. (В разделе «Прокси API» выберите «Проект» > «Загрузить версию» .)
  2. На локальном компьютере создайте новую директорию и распакуйте в неё загруженный ZIP-файл.

    Для распаковки ZIP-файла можно использовать такую ​​утилиту, как unzip , как показано в следующем примере:

    mkdir myappdir
    unzip ./my-app_app_rev3_2019_04_20.zip -d myappdir

    Расширенное содержимое ZIP-файла должно быть аналогично структуре, описанной в разделе «Структура прокси-сервера API» .

  3. При необходимости отредактируйте исходные файлы. Описание исходных файлов в конфигурации прокси-сервера см. в разделе «Файлы конфигурации и структура каталогов API-прокси» .

    Например, чтобы включить мониторинг состояния вашего API-прокси, отредактируйте конфигурационный файл TargetEndpoint в каталоге /apiproxy/targets/ . Файл по умолчанию в этом каталоге называется default.xml , хотя при использовании условных целей могут быть файлы с другими именами.

    В этом случае, если файл конфигурации TargetEndpoint и соответствующая директория отсутствуют, создайте их.

  4. После завершения редактирования файлов конфигурации прокси-сервера обязательно сохраните изменения.
  5. Перейдите в новую директорию, которую вы создали при распаковке ZIP-файлов (корневая директория распакованных конфигурационных файлов).

    Например, если вы распаковали файлы в каталог /myappdir , перейдите в этот каталог, как показано в следующем примере:

    cd myappdir

    Перед повторным архивированием файлов конфигурации прокси-сервера вам следует перейти в этот каталог, поскольку каталог /myappdir не должен быть включен в ZIP-архив. В ZIP-архиве корневым каталогом должен быть /apiproxy .

  6. Заархивируйте файлы конфигурации прокси-сервера, включая новые или измененные файлы. Для этого можно использовать такую ​​утилиту, как zip , как показано в следующем примере:
    zip my-new-proxy.zip -r .

    В корневом каталоге ZIP-файла должен быть /apiproxy .

    К имени ZIP-файла нет особых требований. Например, не нужно увеличивать номер ревизии или указывать дату в имени файла, но это может быть полезно для отладки или контроля версий.

    Edge автоматически увеличивает номер версии новой конфигурации прокси-сервера при ее загрузке.

  7. Загрузите новую конфигурацию прокси-сервера с помощью пользовательского интерфейса Edge. (В разделе «Прокси API» выберите «Проект» > «Загрузить новую версию» .)

    Если вы получили ошибку типа Bundle is invalid. Empty bundle. , убедитесь, что корневой каталог вашего ZIP-файла — /apiproxy . Если это не так, повторно заархивируйте файлы конфигурации прокси из корневого каталога, в который вы его распаковали.

    После загрузки новой конфигурации прокси-сервера Edge увеличивает номер версии и отображает его в разделе «Сводка версий» .

    После загрузки новой версии через пользовательский интерфейс Edge не устанавливает её автоматически.

  8. Разверните новую версию.

Для получения более подробной информации см. руководство: Как загрузить прокси-сервер с помощью пользовательского интерфейса и API управления в сообществе Apigee .

структура API-прокси

API-прокси состоит из следующей конфигурации:

Базовая конфигурация Основные параметры конфигурации для API-прокси. См. Базовая конфигурация.
Конфигурация ProxyEndpoint Настройки входящего HTTP-соединения (от запрашивающих приложений к Apigee Edge), потоков запросов и ответов, а также прикрепленных политик. См. ProxyEndpoint .
Конфигурация целевой конечной точки Настройки исходящего HTTP-соединения (от Apigee Edge к серверной службе), потоков запросов и ответов, а также прикрепленных политик. См. TargetEndpoint.
Потоки Конвейеры запросов и ответов ProxyEndpoint и TargetEndpoint, к которым можно прикреплять политики. См. раздел «Потоки» .
Политики Конфигурационные файлы в формате XML, соответствующие схемам политик Apigee Edge. См. раздел «Политики» .
Ресурсы Скрипты, JAR-файлы и XSLT-файлы, на которые ссылаются политики для выполнения пользовательской логики. См. Ресурсы .

Структура и содержимое каталога API-прокси

Компоненты, указанные в таблице выше, определяются конфигурационными файлами, расположенными в следующей структуре каталогов:

Показана структура каталогов, в которой apiproxy является корневым каталогом. Непосредственно под каталогом apiproxy находятся каталоги policies, proxies, resources и targets, а также файл weatherapi.xml.

Конфигурационные файлы и структура каталогов API-прокси

В этом разделе описываются конфигурационные файлы и структура каталогов API-прокси.

Базовая конфигурация

/apiproxy/weatherapi.xml

Базовая конфигурация для API-прокси, определяющая имя API-прокси. Имя должно быть уникальным в пределах организации.

Пример конфигурации:

<APIProxy name="weatherapi">
</APIProxy>

Элементы базовой конфигурации

Имя Описание По умолчанию Необходимый?
APIProxy
name Имя API-прокси, которое должно быть уникальным в рамках организации. Допустимые символы в имени ограничены следующими: A-Za-z0-9_- Н/Д Да
revision Номер ревизии конфигурации API-прокси. Указывать номер ревизии явно не требуется, поскольку Apigee Edge автоматически отслеживает текущую ревизию API-прокси. Н/Д Нет
ConfigurationVersion Версия схемы конфигурации API-прокси, которой соответствует данный API-прокси. В настоящее время поддерживаются только значения majorVersion 4 и minorVersion 0. В будущем этот параметр может быть использован для обеспечения возможности развития формата API-прокси. 4.0 Нет
Description Текстовое описание API-прокси. Если оно указано, описание будет отображаться в пользовательском интерфейсе управления Edge. Н/Д Нет
DisplayName Удобное для пользователя имя, которое может отличаться от имени, указанного в атрибуте name конфигурации API-прокси. Н/Д Нет
Policies Список политик в каталоге /policies этого API-прокси. Обычно этот элемент отображается только в том случае, если API-прокси был создан с помощью пользовательского интерфейса управления Edge. Это просто параметр «манифеста», предназначенный для обеспечения видимости содержимого API-прокси. Н/Д Нет
ProxyEndpoints Список ProxyEndpoints в каталоге /proxies этого API-прокси. Обычно этот элемент отображается только в том случае, если API-прокси был создан с помощью пользовательского интерфейса управления Edge. Это просто параметр «манифеста», предназначенный для обеспечения видимости содержимого API-прокси. Н/Д Нет
Resources Список ресурсов (JavaScript, Python, Java, XSLT) в каталоге /resources этого API-прокси. Обычно этот элемент отображается только в том случае, если API-прокси был создан с помощью пользовательского интерфейса управления Edge. Это просто параметр «манифеста», предназначенный для обеспечения видимости содержимого API-прокси. Н/Д Нет
Spec Указывает спецификацию OpenAPI, связанную с прокси-сервером API. Значение устанавливается в виде URL-адреса или пути в хранилище спецификаций.

Примечание : хранилище спецификаций доступно только в новой версии Edge. Дополнительную информацию о хранилище спецификаций см. в разделе «Управление и совместное использование спецификаций» .
Н/Д Нет
TargetServers Список целевых серверов (TargetServers), на которые ссылаются целевые конечные точки (TargetEndpoints) этого API-прокси. Обычно этот элемент отображается только в том случае, если API-прокси был создан с помощью пользовательского интерфейса управления Edge. Это просто параметр «манифеста», предназначенный для обеспечения видимости содержимого API-прокси. Н/Д Нет
TargetEndpoints Список целевых конечных точек (TargetEndpoints) в каталоге /targets этого API-прокси. Обычно этот элемент отображается только в том случае, если API-прокси был создан с помощью пользовательского интерфейса управления Edge. Это просто параметр «манифеста», предназначенный для обеспечения видимости содержимого API-прокси. Н/Д Нет

ProxyEndpoint

На следующем изображении показана последовательность запросов и ответов:

На изображении показан клиент, обращающийся к HTTP-сервису. Запрос проходит через прокси-сервер, а затем через целевой сервер, прежде чем быть обработанным HTTP-сервисом. Ответ проходит через целевой сервер, а затем через прокси-сервер, прежде чем быть возвращен клиенту.

/apiproxy/proxies/default.xml

Конфигурация ProxyEndpoint определяет входящий (обращенный к клиенту) интерфейс для прокси-сервера API. При настройке ProxyEndpoint вы задаете сетевую конфигурацию, которая определяет, как клиентские приложения («apps») должны вызывать проксируемый API.

Пример конфигурации ProxyEndpoint, приведенный ниже, будет храниться в каталоге /apiproxy/proxies :

<ProxyEndpoint name="default">
  <PreFlow/>
  <Flows/>
  <PostFlow/>
  <HTTPProxyConnection>
    <BasePath>/weather</BasePath>
    <VirtualHost>default</VirtualHost>
  </HTTPProxyConnection>
  <FaultRules/>
  <DefaultFaultRule/>
  <RouteRule name="default">
    <TargetEndpoint>default</TargetEndpoint>
  </RouteRule>
</ProxyEndpoint>

В базовой конфигурации ProxyEntpoint необходимы следующие элементы:

Элементы конфигурации ProxyEndpoint

Имя Описание По умолчанию Необходимый?
ProxyEndpoint
name Имя ProxyEndpoint. Должно быть уникальным в рамках конфигурации API-прокси, если (в редких случаях) определено несколько ProxyEndpoint. Допустимые символы в имени ограничены следующими: A-Za-z0-9._\-$ % . Н/Д Да
PreFlow Определяет правила в процессе предварительного обработки запроса или ответа. Н/Д Да
Flows
Определяет правила обработки запросов и ответов в зависимости от условий.
Н/Д Да
PostFlow
Определяет правила обработки запроса или ответа в постфактуме.
Н/Д Да
HTTPProxyConnection Определяет сетевой адрес и URI-путь, связанные с прокси-сервером API.
BasePath

Обязательная строка, однозначно идентифицирующая путь URI, используемый Apigee Edge для маршрутизации входящих сообщений к соответствующему API-прокси.

BasePath — это фрагмент URI (например /weather ), добавляемый к базовому URL API-прокси (например, http://apifactory-test.apigee.net ). BasePath должен быть уникальным в пределах одной среды. Уникальность проверяется при генерации или импорте API-прокси.

Использование подстановочного знака в базовых путях

В базовых путях API-прокси можно использовать один или несколько символов подстановки "*". Например, базовый путь /team/*/members позволяет клиентам вызывать https://[host]/team/ blue /members и https://[host]/team/ green /members без необходимости создания новых API-прокси для поддержки новых команд. Обратите внимание, что /**/ не поддерживается.

Важно: Apigee НЕ поддерживает использование символа подстановки "*" в качестве первого элемента базового пути. Например, это НЕ поддерживается: /*/search . Начало базового пути с "*" может привести к непредвиденным ошибкам из-за особенностей распознавания допустимых путей в Edge.

/ Да
VirtualHost

Связывает API-прокси с определенными базовыми URL-адресами для среды. VirtualHost — это именованная конфигурация, определяющая один или несколько URL-адресов для среды.

Именованные виртуальные хосты (VirtualHosts), определенные для ProxyEndpoint, определяют домены и порты, по которым доступен API-прокси, и, соответственно, URL-адрес, который приложения используют для вызова API-прокси.

По умолчанию для среды определены два именованных виртуальных хоста: default и secure . Организация также может определить собственные домены. Например, чтобы гарантировать доступность API-прокси только по протоколу HTTPS, установите для параметра VirtualHost в HTTPProxyConnection значение secure .

по умолчанию Нет
Properties В качестве свойств объекта <ProxyEndpoint> можно определить набор необязательных параметров конфигурации HTTP. Н/Д Нет
FaultRules
Определяет, как ProxyEndpoint реагирует на ошибку. Правило обработки ошибок задает два параметра:
  • Условие, определяющее тип ошибки, подлежащей обработке, на основе предопределенной категории, подкатегории или названия ошибки.
  • Одна или несколько политик, определяющих поведение правила обработки ошибок для соответствующего условия.

См. раздел «Обработка ошибок» .

Н/Д Нет
DefaultFaultRule

Обрабатывает любые ошибки (системные, транспортные, ошибки обмена сообщениями или ошибки политики), которые не обрабатываются явно другим правилом обработки ошибок.

См. раздел «Обработка ошибок» .

Н/Д Нет
RouteRule Определяет место назначения входящих запросов после их обработки конвейером обработки запросов ProxyEndpoint. Обычно RouteRule указывает на именованную конфигурацию TargetEndpoint, но может также указывать непосредственно на URL-адрес.
Name Обязательный атрибут, который задает имя для правила маршрутизации (RouteRule). Допустимые символы в имени ограничены следующими: A-Za-z0-9._\-$ % . Например, Cat2 %_ допустимое имя. Н/Д Да
Condition Необязательное условное выражение, используемое для динамической маршрутизации во время выполнения. Условные правила маршрутизации полезны, например, для включения маршрутизации на основе содержимого для поддержки версионирования на стороне бэкэнда. Н/Д Нет
TargetEndpoint

Необязательная строка, идентифицирующая именованную конфигурацию TargetEndpoint. Именованный TargetEndpoint — это любой TargetEndpoint, определенный в том же API-прокси в каталоге /targets .

Указав имя TargetEndpoint, вы определяете, куда следует перенаправлять сообщения запроса после обработки конвейером обработки запросов ProxyEndpoint. Обратите внимание, что это необязательный параметр.

ProxyEndpoint может напрямую вызывать URL-адрес. Например, ресурс JavaScript или Java, выполняющий роль HTTP-клиента, может выполнять основную функцию TargetEndpoint, а именно перенаправлять запросы к серверной службе.

Н/Д Нет
URL Необязательная строка, определяющая исходящий сетевой адрес, вызываемый ProxyEndpoint, в обход любых конфигураций TargetEndpoint, которые могут храниться в каталоге /targets Н/Д Нет

Как настроить правила маршрутизации (RouteRules)

Именованный TargetEndpoint — это конфигурационный файл, расположенный в каталоге /apiproxy/targets , на который RouteRule перенаправляет запрос после обработки ProxyEndpoint.

Например, следующее правило маршрутизации (RouteRule) ссылается на конфигурационный файл /apiproxy/targets/myTarget.xml :

<RouteRule name="default">
  <TargetEndpoint>myTarget</TargetEndpoint>
</RouteRule>

Прямой вызов URL

ProxyEndpoint также может напрямую вызывать бэкэнд-сервис. Прямой вызов по URL-адресу обходит любую конфигурацию именованных TargetEndpoints в каталоге /apiproxy/targets . По этой причине TargetEndpoint является необязательной конфигурацией API-прокси, хотя на практике прямой вызов из ProxyEndpoint не рекомендуется.

Например, следующее правило маршрутизации (RouteRule) выполняет HTTP-запрос к адресу http://api.mycompany.com/v2 .

<RouteRule name="default">
  <URL>http://api.mycompany.com/v2</URL>
</RouteRule>

Условные маршруты

Правила маршрутизации можно объединять в цепочки для поддержки динамической маршрутизации во время выполнения. Входящие запросы могут направляться к именованным конфигурациям TargetEndpoint, непосредственно к URL-адресам или к их комбинации в зависимости от HTTP-заголовков, содержимого сообщения, параметров запроса или контекстной информации, такой как время суток, локаль и т. д.

Условные правила маршрутизации работают аналогично другим условным операторам в Apigee Edge. См. справочник по условиям и справочник по переменным .

Например, следующая комбинация RouteRule сначала проверяет входящий запрос, чтобы убедиться в значении HTTP-заголовка. Если HTTP-заголовок routeTo имеет значение TargetEndpoint1 , то запрос перенаправляется на целевой объект TargetEndpoint1 . В противном случае входящий запрос перенаправляется на http://api.mycompany.com/v2 .

<RouteRule name="MyRoute">
  <Condition>request.header.routeTo = "TargetEndpoint1"</Condition>
  <TargetEndpoint>TargetEndpoint1</TargetEndpoint>
</RouteRule>
<RouteRule name="default">
  <URL>http://api.mycompany.com/v2</URL>
</RouteRule>

Пустые маршруты

Для поддержки сценариев, в которых сообщение запроса не нужно перенаправлять в TargetEndpoint, можно определить RouteRule со значением null. Это полезно, когда ProxyEndpoint выполняет всю необходимую обработку, например, используя JavaScript для вызова внешней службы или извлекая данные из таблицы поиска в хранилище ключ/значение API-сервисов.

Например, ниже определен маршрут со значением null:

<RouteRule name="GoNowhere"/>

Условные маршруты со значением null могут быть полезны. В следующем примере маршрут со значением null настроен на выполнение, когда заголовок HTTP request.header.X-DoNothing имеет значение, отличное от null .

<RouteRule name="DoNothingOnDemand">
  <Condition>request.header.X-DoNothing != null</Condition>
</RouteRule>

Помните, что правила маршрутизации (RouteRules) можно объединять в цепочки, поэтому условный маршрут со значением null обычно является одним из компонентов набора правил маршрутизации, предназначенных для поддержки условной маршрутизации.

Практическое применение условного маршрута со значением null — поддержка кэширования. Используя значение переменной, установленной политикой кэширования, можно настроить API-прокси для выполнения маршрута со значением null при получении записи из кэша.

<RouteRule name="DoNothingUnlessTheCacheIsStale">
  <Condition>lookupcache.LookupCache-1.cachehit is true</Condition>
</RouteRule>

Целевая точка

На изображении показан клиент, обращающийся к HTTP-сервису. Запрос проходит через прокси-сервер, а затем через целевой сервер, прежде чем быть обработанным HTTP-сервисом. Ответ проходит через целевой сервер, а затем через прокси-сервер, прежде чем быть возвращен клиенту.

TargetEndpoint — это исходящий аналог ProxyEndpoint. TargetEndpoint функционирует как клиент для бэкэнд-сервиса или API — он отправляет запросы и получает ответы.

API-прокси не обязательно должен иметь TargetEndpoints. ProxyEndpoints можно настроить для прямого вызова URL-адресов. API-прокси без TargetEndpoints обычно содержит ProxyEndpoint, который либо напрямую вызывает бэкэнд-сервис, либо настроен на вызов сервиса с использованием Java или JavaScript.

Конфигурация целевой конечной точки

/targets/default.xml

Параметр TargetEndpoint определяет исходящее соединение от Apigee Edge к другой службе или ресурсу.

Вот пример конфигурации TargetEndpoint:

<TargetEndpoint name="default">
  <PreFlow/>
  <Flows/>
  <PostFlow/>
  <HTTPTargetConnection>
    <URL>http://mocktarget.apigee.net</URL>
    <SSLInfo/>
  </HTTPTargetConnection>
  <FaultRules/>
  <DefaultFaultRule/>
  <ScriptTarget/>
  <LocalTargetConnection/>
</TargetEndpoint>

Элементы конфигурации TargetEndpoint

Объект TargetEndpoint может вызывать целевой объект одним из следующих способов:

  • HTTPTargetConnection для HTTP(S) вызовов
  • LocalTargetConnection для цепочки локальных прокси-серверов.
  • ScriptTarget для вызовов скрипта Node.js , размещенного на сервере Edge.

В TargetEndpoint следует настроить только один из этих параметров.

Имя Описание По умолчанию Необходимый?
TargetEndpoint
name Имя TargetEndpoint должно быть уникальным в конфигурации API-прокси. Имя TargetEndPoint используется в правиле маршрутизации ProxyEndpoint для направления запросов на исходящую обработку. Допустимые символы в имени ограничены следующими: A-Za-z0-9._\-$ % . Н/Д Да
PreFlow Определяет правила в процессе предварительного обработки запроса или ответа. Н/Д Да
Flows
Определяет правила обработки запросов и ответов в зависимости от условий.
Н/Д Да
PostFlow
Определяет правила обработки запроса или ответа в постфактуме.
Н/Д Да
HTTPTargetConnection

С помощью дочерних элементов указывается доступ к серверному ресурсу по протоколу HTTP.

Если вы используете HTTPTargetConnection, не настраивайте другие типы целевых подключений (ScriptTarget или LocalTargetConnection).

URL Определяет сетевой адрес серверной службы, на которую TargetEndpoint пересылает запросы. Н/Д Нет
LoadBalancer

Определяет одну или несколько именованных конфигураций TargetServer. Именованные конфигурации TargetServer могут использоваться для балансировки нагрузки, определяя 2 или более соединений конфигурации конечных точек.

Также можно использовать TargetServers для отделения конфигураций API-прокси от конкретных URL-адресов конечных точек бэкэнд-сервисов.

См. раздел «Балансировка нагрузки между серверами бэкэнда» .

Н/Д Нет
Properties В качестве свойств объекта <TargetEndpoint> можно определить набор необязательных параметров конфигурации HTTP. Н/Д Нет
SSLInfo При необходимости можно задать параметры TLS/SSL для TargetEndpoint, чтобы управлять соединением TLS/SSL между API-прокси и целевой службой. См. раздел «Конфигурация TLS/SSL TargetEndpoint» . Н/Д Нет
LocalTargetConnection С помощью дочерних элементов указывается ресурс, доступ к которому осуществляется локально, в обход таких сетевых функций, как балансировка нагрузки и обработчики сообщений.

Для указания целевого ресурса используйте либо дочерний элемент APIProxy (с элементом ProxyEndpoint), либо дочерний элемент Path.

Для получения более подробной информации см. раздел «Связывание API-прокси» .

Если вы используете LocalTargetConnection, не настраивайте другие типы целевых подключений (HTTPTargetConnection или ScriptTarget).

APIProxy Указывает имя API-прокси, который будет использоваться в качестве целевого объекта для запросов. Целевой прокси должен находиться в той же организации и среде, что и прокси, отправляющий запросы. Это альтернатива использованию элемента Path. Н/Д Нет
ProxyEndpoint Используется с APIProxy для указания имени ProxyEndpoint целевого прокси-сервера. Н/Д Нет
Path Указывает путь к конечной точке API-прокси, который будет использоваться в качестве целевого адреса для запросов. Целевой прокси должен находиться в той же организации и среде, что и прокси, отправляющий запросы. Это альтернатива использованию APIProxy. Н/Д Нет
FaultRules
Определяет, как TargetEndpoint реагирует на ошибку. Правило обработки ошибок задает два параметра:
  • Условие, определяющее тип ошибки, подлежащей обработке, на основе предопределенной категории, подкатегории или названия ошибки.
  • Одна или несколько политик, определяющих поведение правила обработки ошибок для соответствующего условия.

См. раздел «Обработка ошибок» .

Н/Д Нет
DefaultFaultRule

Обрабатывает любые ошибки (системные, транспортные, ошибки обмена сообщениями или ошибки политики), которые не обрабатываются явно другим правилом обработки ошибок (FaultRule).

См. раздел «Обработка ошибок» .

Н/Д Нет
ScriptTarget
ResourceURL

Определяет тип ресурса (узел) и имя основного скрипта Node.js, реализующего функциональность TargetEndpoint.

<ResourceURL>node://server.js</ResourceURL>

Этот скрипт необходимо включить в файлы ресурсов вашего API-прокси. См. раздел «Добавление Node.js в существующий API-прокси» .

Если вы используете ScriptTarget, не настраивайте другие типы целевых подключений (HTTPTargetConnection или LocalTargetConnection).

Н/Д Да
EnvironmentVariable

При желании можно передать переменные окружения основному скрипту Node.js.

См. раздел «Понимание поддержки модулей Node.js в Edge» .

Н/Д Нет
Arguments

При желании можно передавать аргументы основному скрипту Node.js.

См. раздел «Понимание поддержки модулей Node.js в Edge» .

Н/Д Нет

Конфигурация целевой/конечной точки TLS/SSL

Целевым конечным точкам часто приходится управлять HTTPS-соединениями с гетерогенной серверной инфраструктурой. По этой причине поддерживается ряд параметров конфигурации TLS/SSL.

Элементы конфигурации целевой конечной точки TLS/SSL

Имя Описание По умолчанию Необходимый?
SSLInfo
Enabled Указывает, включен ли протокол TLS/SSL для конечной точки. Значение по умолчанию — true , если <URL> указывает протокол HTTPS, и false если <URL> указывает протокол HTTP. истина, если <URL> указывает HTTPS Нет
TrustStore Хранилище ключей, содержащее доверенные сертификаты сервера. Н/Д Нет
ClientAuthEnabled Параметр, включающий исходящую аутентификацию клиента (двусторонний TLS/SSL). ЛОЖЬ Нет
KeyStore Хранилище ключей, содержащее закрытые ключи, используемые для аутентификации исходящих клиентов. Н/Д Да (если ClientAuthEnabled имеет значение true)
KeyAlias Псевдоним закрытого ключа, используемого для исходящей аутентификации клиента. Н/Д Да (если ClientAuthEnabled имеет значение true)
Ciphers

Поддерживаемые алгоритмы шифрования для исходящего TLS/SSL. Если алгоритмы шифрования не указаны, будут разрешены все алгоритмы, доступные для JVM.

Для ограничения выбора шифров добавьте следующие элементы, перечисляющие поддерживаемые шифры:

<Ciphers>
 <Cipher>TLS_RSA_WITH_3DES_EDE_CBC_SHA</Cipher>
 <Cipher>TLS_RSA_WITH_DES_CBC_SHA</Cipher>
</Ciphers>
Н/Д Нет
Protocols

Поддерживаемые протоколы для исходящего TLS/SSL. Если протоколы не указаны, будут разрешены все протоколы, доступные для JVM.

Для ограничения доступа к протоколам добавьте следующие элементы, перечисляющие поддерживаемые протоколы:

<Protocols>
 <Protocol>TLSv1.1</Protocol>
 <Protocol>TLSv1.2</Protocol>
</Protocols>
Н/Д Нет
CommonName

Если указано, задается значение, по которому проверяется общее имя целевого сертификата. Это значение допустимо только для конфигураций TargetEndpoint и TargetServer. Оно недопустимо для конфигураций VirtualHost.

По умолчанию указанное значение точно совпадает с общим именем целевого сертификата. Например, использование *.myhost.com в качестве значения для <CommonName> позволит найти и проверить целевое имя хоста только в том случае, если в целевом сертификате в качестве общего имени указано точное значение *.myhost.com .

При желании Apigee может выполнять сопоставление с использованием подстановочных символов, используя атрибут wildcardMatch .

Например, общее имя, указанное как abc.myhost.com в целевом сертификате, будет найдено и проверено, если элемент <CommonName> указан следующим образом:

<CommonName wildcardMatch="true">*.myhost.com</CommonName>
Н/Д Нет

Пример целевой конечной точки с включенной исходящей аутентификацией клиента.

<TargetEndpoint name="default">
  <HttpTargetConnection>
        <URL>https://myservice.com</URL>
    <SSLInfo>
      <Enabled>true</Enabled>
      <ClientAuthEnabled>true</ClientAuthEnabled>
      <KeyStore>myKeystore</KeyStore>
      <KeyAlias>myKey</KeyAlias>
      <TrustStore>myTruststore</TrustStore>
    </SSLInfo>
  </HttpTargetConnection>
</TargetEndpoint>

Подробные инструкции см. в разделе «Настройка TLS от периферии сети к серверной части (облако и частное облако)» .

Использование переменных потока для динамической установки значений TLS/SSL.

Вы также можете динамически устанавливать параметры TLS/SSL для поддержки гибких требований среды выполнения. Например, если ваш прокси-сервер подключается к двум потенциально разным целевым объектам (тестовому и производственному), вы можете настроить API-прокси таким образом, чтобы он программно определял, к какой среде он обращается, и динамически устанавливал ссылки на соответствующее хранилище ключей и хранилище доверенных сертификатов. В следующей статье сообщества Apigee этот сценарий объясняется более подробно и приводятся примеры развертывания API-прокси: Динамическая SSLInfo для TargetEndpoint с использованием ссылки на переменную .

В следующем примере установки тега <SSLInfo> в конфигурации TargetEndpoint значения могут быть предоставлены во время выполнения, например, с помощью вызова Java, политики JavaScript или политики назначения сообщений. Используйте те переменные сообщения, которые содержат значения, которые вы хотите установить.

Переменные допускаются только в следующих элементах.

<SSLInfo>
    <Enabled>{myvars.ssl.enabled}</Enabled>
    <ClientAuthEnabled>{myvars.ssl.client.auth.enabled}</ClientAuthEnabled>
    <KeyStore>{myvars.ssl.keystore}</KeyStore>
    <KeyAlias>{myvars.ssl.keyAlias}</KeyAlias>
    <TrustStore>{myvars.ssl.trustStore}</TrustStore>
</SSLInfo>

Использование ссылок для динамической установки значений TLS/SSL.

При настройке целевой конечной точки, использующей HTTPS, необходимо учитывать случай истечения срока действия сертификата TLS/SSL или необходимости обновления сертификата в связи с изменением конфигурации системы. В установке Edge for Private Cloud при настройке TLS/SSL с использованием статических значений или переменных потока существует вероятность необходимости перезапуска обработчиков сообщений.

Дополнительную информацию см. в разделе «Обновление TLS-сертификата» .

Однако, при желании, вы можете настроить TargetEndpoint так, чтобы он использовал ссылку на хранилище ключей или доверенных сертификатов. Преимущество использования ссылки заключается в том, что вы можете обновить ссылку, указав на другое хранилище ключей или доверенных сертификатов, чтобы обновить сертификат TLS/SSL без необходимости перезапуска обработчиков сообщений.

Например, ниже показана целевая конечная точка (TargetEndpoint), использующая ссылку на хранилище ключей:

<SSLInfo>
    <Enabled>true</Enabled>
    <ClientAuthEnabled>false</ClientAuthEnabled>
    <KeyStore>ref://keystoreref</KeyStore>
    <KeyAlias>myKeyAlias</KeyAlias>
</SSLInfo>

Для создания ссылки с именем keystoreref используйте следующий POST-запрос к API:

curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
-d '<ResourceReference name="keystoreref">
    <Refers>myTestKeystore</Refers>
    <ResourceType>KeyStore</ResourceType>
</ResourceReference>' -u email:password

В ссылке указывается имя хранилища ключей и его тип.

Для просмотра справочной информации воспользуйтесь следующим вызовом API GET:

curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:password

Чтобы впоследствии изменить ссылку и указать на другое хранилище ключей, убедившись, что псевдоним имеет то же имя, используйте следующий вызов PUT:

curl -X PUT -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references/keystoreref \
-d '<ResourceReference name="keystoreref">
    <Refers>myNewKeystore</Refers>
    <ResourceType>KeyStore</ResourceType>
</ResourceReference>' -u email:password

TargetEndpoint с балансировкой нагрузки на целевой объект.

TargetEndpoints поддерживают балансировку нагрузки между несколькими именованными TargetServers с использованием трех алгоритмов балансировки нагрузки.

Подробные инструкции см. в разделе « Балансировка нагрузки между серверами бэкэнда» .

Политики

В каталоге /policies в API-прокси содержатся все политики, которые можно прикрепить к потокам в API-прокси.

Элементы конфигурации политики

Имя Описание По умолчанию Необходимый?
Policy
name

Внутреннее имя политики. В имени можно использовать только следующие символы: A-Za-z0-9._\-$ % . Однако пользовательский интерфейс управления Edge применяет дополнительные ограничения, например, автоматически удаляет небуквенно-цифровые символы.

При желании используйте элемент <DisplayName> , чтобы присвоить политике в редакторе прокси-сервера пользовательского интерфейса управления другое имя на естественном языке.

Н/Д Да
enabled

Установите значение true , чтобы обеспечить соблюдение политики.

Установите значение false , чтобы «отключить» политику. Политика не будет применяться, даже если она останется привязанной к потоку.

истинный Нет
continueOnError

Установите значение false , чтобы при сбое политики возвращалась ошибка. Это ожидаемое поведение для большинства политик.

Установите значение true , чтобы выполнение потока продолжалось даже после сбоя политики.

ЛОЖЬ Нет
async

Примечание : Этот атрибут не обеспечивает асинхронное выполнение политики. В большинстве случаев оставьте значение по умолчанию — false .

Если установить значение true , выполнение политики переносится в другой поток, освобождая основной поток для обработки дополнительных запросов. После завершения автономной обработки основной поток возвращается и завершает обработку потока сообщений. В некоторых случаях установка параметра async в true повышает производительность API-прокси. Однако чрезмерное использование async может снизить производительность из-за слишком частого переключения потоков.

Для использования асинхронного поведения в API-прокси см. объектную модель JavaScript .

ЛОЖЬ Нет

Приложение к полису

На следующем изображении показана последовательность выполнения потоков API-прокси:

На рисунке показан клиент, обращающийся к HTTP-сервису. Запрос проходит через ProxyEndpoint и TargetEndpoint, каждый из которых содержит шаги, запускающие политики. После того, как HTTP-сервис возвращает ответ, ответ обрабатывается TargetEndpoint, а затем ProxyEndpoint, прежде чем быть возвращенным клиенту. Как и в случае с запросом, ответ обрабатывается политиками внутри шагов.

Как показано выше:

Политики прикрепляются к потокам в качестве этапов обработки. Название политики используется для ссылки на политику, которая должна быть применена в качестве этапа обработки. Формат прикрепления политики следующий:

<Step><Name>MyPolicy</Name></Step>

Политики применяются в том порядке, в котором они привязаны к потоку. Например:

<Step><Name>FirstPolicy</Name></Step>
<Step><Name>SecondPolicy</Name></Step>

Элементы конфигурации прикрепления политики

Имя Описание По умолчанию Необходимый?
Step
Name Название политики, которая должна быть выполнена в соответствии с данным определением шага. Н/Д Да
Condition Условное выражение, определяющее, будет ли политика применяться или нет. Если у политики есть связанное с ней условие, то политика будет выполняться только в том случае, если условное выражение оценивается как истинное. Н/Д Нет

Потоки

ProxyEndpoint и TargetEndpoint определяют конвейер обработки запросов и ответов. Конвейер обработки состоит из потока запроса и потока ответа. Каждый поток запроса и поток ответа подразделяются на PreFlow, один или несколько необязательных «условных» или «именованных» потоков и PostFlow.

  • PreFlow: Всегда выполняется. Выполняется перед любыми условными потоками.
  • PostFlow: Всегда выполняется. Выполняется после любых условных потоков.

Кроме того, вы можете добавить PostClientFlow к ProxyEndpoint, который выполняется после того, как ответ будет возвращен запрашивающему клиентскому приложению. К этому потоку можно прикрепить только политику MessageLogging и расширение Google Stackdriver Logging Extension . PostClientFlow уменьшает задержку API-прокси и предоставляет для логирования информацию, которая вычисляется только после того, как ответ будет возвращен клиенту, например, client.sent.start.timestamp и client.sent.end.timestamp . Этот поток используется в основном для измерения временного интервала между метками начала и конца ответного сообщения.

Посмотрите короткое видео с инструкцией.

Видео: Посмотрите это короткое видео об использовании логирования сообщений в PostClientFlow.

Вот пример PostClientFlow с прикрепленной политикой логирования сообщений.

    ...
    <PostFlow name="PostFlow">
        <Request/>
        <Response/>
    </PostFlow>
    <PostClientFlow>
        <Request/>
        <Response>
            <Step>
                <Name>Message-Logging-1</Name>
            </Step>
        </Response>
    </PostClientFlow>
    ...

Конвейер обработки API-прокси выполняет потоки в следующей последовательности:

Конвейер обработки запросов:

  1. Предварительный поток запроса прокси
  2. Условные потоки запросов через прокси (необязательно)
  3. Постпоток запроса прокси
  4. Предварительный поток целевого запроса
  5. Условные потоки целевого запроса (необязательно)
  6. Постпоток целевого запроса

Конвейер обработки ответов:

  1. Предварительный поток ответа на целевой запрос
  2. Target Response Conditional Flows (Optional)
  3. Target Response PostFlow
  4. Proxy Response PreFlow
  5. Proxy Response Conditional Flows (Optional)
  6. Proxy Response PostFlow
  7. PostClientFlow Response (Optional)

Only those Flows with policy attachments need to be configured in ProxyEndpoint or TargetEndpoint configurations. PreFlow and PostFlow need only be specified in a ProxyEndpoint or TargetEndpoint configuration when a policy needs to be enforced during PreFlow or PostFlow processing.

In contrast to conditional flows, the ordering of PreFlow and PostFlow elements is not important--the API proxy will always execute each at the appropriate point in the pipeline, regardless of where they appear in the Endpoint configuration.

Conditional Flows

ProxyEndpoints and TargetEndpoints support an unlimited number of conditional flows (also known as 'named flows').

The API proxy tests for the condition specified in the conditional flow and, if the condition is met, the processing steps in the conditional flow are executed by the API proxy. If the condition is not met, then the processing steps in the conditional flow are bypassed. Conditional flows are evaluated in the order defined in the API proxy and the first one whose condition is met is executed.

By defining conditional flows, you gain the ability to apply processing steps in an API proxy based on:

  • Request URI
  • HTTP verb (GET/PUT/POST/DELETE)
  • Value of a query param, header, and form param
  • Many other types of conditions

For example, the following conditional flow specifies that it is executed only when the request resource path is /accesstoken . Any inbound request with the path /accesstoken causes this flow to be executed, along with any policies that are attached to the flow. If the request path does not include the suffix /accesstoken , then the flow does not execute (although another conditional flow might).

<Flows>
  <Flow name="TokenEndpoint">
    <Condition>proxy.pathsuffix MatchesPath "/accesstoken"</Condition>
    <Request>
      <Step>
        <Name>GenerateAccessToken</Name>
      </Step>
    </Request>
  </Flow>
</Flows>

Flow Configuration Elements

Имя Описание По умолчанию Необходимый?
Flow A request or response processing pipeline defined by A ProxyEndpoint or TargetEndpoint
Name The unique name of the Flow. Н/Д Да
Condition A conditional statement that evaluates on or more variables to evaluate to true or false. All Flows other than the predefined PreFlow and PostFlow types must define a condition for their execution. Н/Д Да
Request The pipeline associated with Request message processing Н/Д Нет
Response The pipeline associated with Response message processing Н/Д Нет

Step processing

The sequential ordering of conditional Flows is enforced by Apigee Edge. Conditional Flows execute from top to bottom. The first conditional Flow whose condition evaluates to true is executed, and only one conditional Flow is executed.

For example, in the following Flow configuration, any inbound request that does not include the path suffix /first or /second will cause the ThirdFlow to execute, enforcing the policy called Return404 .

<Flows>
  <Flow name="FirstFlow">
    <Condition>proxy.pathsuffix MatchesPath "/first"</Condition>
    <Request>
      <Step><Name>FirstPolicy</Name></Step>
    </Request>
  </Flow>
  <Flow name="SecondFlow">
    <Condition>proxy.pathsuffix MatchesPath "/second"</Condition>
    <Request>
      <Step><Name>FirstPolicy</Name></Step>
      <Step><Name>SecondPolicy</Name></Step>
    </Request>
  </Flow>
  <Flow name="ThirdFlow">
    <Request>
      <Step><Name>Return404</Name></Step>
    </Request>
  </Flow>
</Flows>

Ресурсы

"Resources" (resource files for use in API proxies) are scripts, code, and XSL transformations that can be attached to Flows using policies. These appear in the "Scripts" section of the API proxy editor in the management UI.

See Resource files for the supported resource types.

Resources can be stored in an API proxy, an environment, or an organization. In each case, a resource is referenced by name in a Policy. API Services resolves the name by moving from the API proxy, to environment, to organization level.

A resource stored at the organization level can be referenced by Policies in any environment. A resource stored at the environment level can be referenced by Policies in that environment. A resource stored at the API proxy level can be referenced only by Policies in that API proxy.