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

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

Как разработчик, работающий с 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. См. базовую конфигурацию.
Конфигурация прокси-конечной точки Настройки входящего HTTP-соединения (от запроса приложений к Apigee Edge), потоков запросов и ответов, а также вложений политик. См. ПроксиЭндпойнт .
Конфигурация целевой конечной точки Настройки исходящего HTTP-соединения (от Apigee Edge к внутренней службе), потоков запросов и ответов, а также вложений политик. См. TargetEndpoint.
Потоки Конвейеры запросов и ответов ProxyEndpoint и TargetEndpoint, к которым можно прикрепить политики. См. Потоки .
Политика Файлы конфигурации в формате XML, соответствующие схемам политики Apigee Edge. См. Политики .
Ресурсы Скрипты, файлы JAR и файлы XSLT, на которые ссылаются политики для выполнения пользовательской логики. См. Ресурсы .

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

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

Показывает структуру каталогов, в которой корневым является apiproxy. Непосредственно в каталоге apiproxy находятся каталоги policy, proxys, resources и target, а также файл 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 и majorVersion 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-адрес или путь в хранилище спецификаций.

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

ПроксиКонечная точка

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

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

/apiproxy/proxies/default.xml

Конфигурация ProxyEndpoint определяет входящий (клиентский) интерфейс для прокси-сервера API. Когда вы настраиваете ProxyEndpoint, вы настраиваете конфигурацию сети, которая определяет, как клиентские приложения («приложения») должны вызывать прокси-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>

Обязательными элементами конфигурации в базовой ProxyEndpoint являются:

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

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

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

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

См. Обработка ошибок .

Н/Д Нет
DefaultFaultRule

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

См. Обработка ошибок .

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

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

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

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

Например, следующая комбинация RouteRule сначала оценивает входящий запрос, чтобы проверить значение заголовка HTTP. Если заголовок HTTP routeTo имеет значение TargetEndpoint1 , то запрос перенаправляется в TargetEndpoint с именем 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>

Нулевые маршруты

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

Например, следующее определяет нулевой маршрут:

<RouteRule name="GoNowhere"/>

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

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

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

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

<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 RouteRule для направления запросов на исходящую обработку. В имени разрешено использовать следующие символы: A-Za-z0-9._\-$ % . Н/Д Да
PreFlow Определяет политики в потоке PreFlow запроса или ответа. Н/Д Да
Flows
Определяет политики в условных потоках запроса или ответа.
Н/Д Да
PostFlow
Определяет политики в потоке PostFlow запроса или ответа.
Н/Д Да
HTTPTargetConnection

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

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

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

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

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

См. Балансировка нагрузки на внутренних серверах .

Н/Д Нет
Properties Набор дополнительных параметров конфигурации HTTP можно определить как свойства <TargetEndpoint> . Н/Д Нет
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.

См. раздел Общие сведения о поддержке Edge для модулей Node.js.

Н/Д Нет
Arguments

При необходимости передайте аргументы в основной скрипт Node.js.

См. раздел Общие сведения о поддержке Edge для модулей Node.js.

Н/Д Нет

Конфигурация TLS/SSL TargetEndpoint

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

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

Имя Описание По умолчанию Необходимый?
SSLInfo
Enabled Указывает, включен ли TLS/SSL для конечной точки. Значение по умолчанию — true , если <URL> указывает протокол HTTPS, и false , если <URL> указывает HTTP. true, если <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 с включенной аутентификацией исходящего клиента

<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 от Edge к серверной части (облако и частное облако) .

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

Вы также можете динамически устанавливать детали TLS/SSL для поддержки гибких требований во время выполнения. Например, если ваш прокси-сервер подключается к двум потенциально различным целям (тестовая цель и производственная цель), вы можете заставить свой прокси-сервер API программно определять, какую среду он вызывает, и динамически устанавливать ссылки на соответствующее хранилище ключей и хранилище доверенных сертификатов. В следующей статье сообщества Apigee этот сценарий объясняется более подробно и приводятся примеры развертываемых прокси-серверов API: https://community.apigee.com/articles/21424/dynamic-sslinfo-for-targetendpoint-using-variable.html .

В следующем примере установки тега <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

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

Дополнительные сведения см. в разделе Обновление сертификата TLS .

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

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

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

Используйте следующий вызов POST API, чтобы создать ссылку с именем keystoreref :

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

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

Чтобы просмотреть ссылку, используйте следующий вызов GET API:

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 поддерживает балансировку нагрузки между несколькими именованными серверами TargetServer с использованием трех алгоритмов балансировки нагрузки.

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

Политика

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

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

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

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

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

Н/Д Да
enabled

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

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

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

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

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

ЛОЖЬ Нет
async

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

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

Чтобы использовать асинхронное поведение в прокси-серверах API, см. Объектную модель JavaScript .

ЛОЖЬ Нет

Приложение к политике

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

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

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

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

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

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

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

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

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

Потоки

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

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

Кроме того, вы можете добавить PostClientFlow в ProxyEndpoint, который выполняется после возврата ответа запрашивающему клиентскому приложению. К этому потоку можно прикрепить только политику MessageLogging и расширение ведения журнала Google Stackdriver . 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. Прокси-запрос PreFlow
  2. Условные потоки запроса прокси (необязательно)
  3. PostFlow запроса прокси
  4. Целевой запрос PreFlow
  5. Условные потоки целевого запроса (необязательно)
  6. Постфлоу целевого запроса

Канал ответа:

  1. Целевой ответ PreFlow
  2. Условные потоки целевого ответа (необязательно)
  3. Целевой ответ после потока
  4. PreFlow ответа прокси
  5. Условные потоки ответа прокси (необязательно)
  6. PostFlow ответа прокси
  7. Ответ PostClientFlow (необязательно)

Только те потоки с прикрепленными политиками необходимо настроить в конфигурациях ProxyEndpoint или TargetEndpoint. PreFlow и PostFlow необходимо указывать в конфигурации ProxyEndpoint или TargetEndpoint только в том случае, если необходимо применить политику во время обработки PreFlow или PostFlow.

В отличие от условных потоков, порядок элементов PreFlow и PostFlow не важен — прокси API всегда будет выполнять каждый из них в соответствующей точке конвейера, независимо от того, где они появляются в конфигурации конечной точки.

Условные потоки

ProxyEndpoints и TargetEndpoints поддерживают неограниченное количество условных потоков (также известных как «именованные потоки»).

Прокси-сервер API проверяет условие, указанное в условном потоке, и, если условие выполняется, этапы обработки в условном потоке выполняются прокси-сервером API. Если условие не выполняется, то этапы обработки в условном потоке пропускаются. Условные потоки оцениваются в порядке, определенном в прокси -сервере API, и первое, чье состояние выполнено.

Определяя условные потоки, вы получаете возможность применения этапов обработки в прокси API на основе:

  • Запрос URI
  • Http глагол (get/pot/post/delete)
  • Значение запроса параметра, заголовка и формы параметра
  • Много других видов условий

Например, в следующем условном потоке указывается, что он выполняется только тогда, когда путь ресурса запроса /accesstoken . Любой входящий запрос с путем /accesstoken приводит к выполнению этого потока, а также любые политики, которые прикрепляются к потоку. Если путь запроса не включает суффикс /accesstoken , то поток не выполняется (хотя может быть другой условный поток).

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

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

Имя Описание По умолчанию Необходимый?
Flow Программа обработки запроса или обработки ответов, определяемый ProxyendPoint или TargetEndPoint
Name Уникальное имя потока. Н/Д Да
Condition Условное утверждение, которое оценивает или более переменных, чтобы оценить истинную или неверную. Все потоки, отличные от предопределенных типов префального и постфтоуда, должны определить условие для их выполнения. Н/Д Да
Request Трубопровод, связанный с обработкой сообщений запроса Н/Д Нет
Response Трубопровод, связанный с обработкой сообщений ответа Н/Д Нет

Шаг обработка

Последовательное упорядочение условных потоков применяется Apigee Edge. Условные потоки выполняются сверху вниз. Первый условный поток, состояние которого оценивается в true , выполняется, и выполняется только один условный поток.

Например, в следующей конфигурации потока любой входящий запрос, который не включает в себя суффикс пути /first или /second , приведет к выполнению ThirdFlow , обеспечивая соблюдение политики, называемой 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>

Ресурсы

«Ресурсы» (файлы ресурсов для использования в прокси API) - это скрипты, код и преобразования XSL, которые могут быть прикреплены к потокам с использованием политик. Они появляются в разделе «Скрипты» редактора прокси API в пользовательском интерфейсе управления.

См. Файлы ресурсов для поддерживаемых типов ресурсов.

Ресурсы могут храниться в прокси, среде или организации API. В каждом случае на ресурс ссылается имя в политике. Услуги API разрешают название, переходя от прокси API, к окружающей среде, к уровню организации.

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