Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
В Apigee Edge маршрутизатор обрабатывает весь входящий трафик API. Это означает, что все HTTP- и HTTPS-запросы к прокси-серверу API Edge сначала обрабатываются маршрутизатором Edge. Поэтому запрос прокси-сервера API должен быть направлен на IP-адрес и открытый порт маршрутизатора.
Виртуальный хост позволяет размещать несколько доменных имен на одном сервере или группе серверов. В Edge серверы соответствуют маршрутизаторам Edge. Определив виртуальные хосты на маршрутизаторе, вы сможете обрабатывать запросы к нескольким доменам.
Виртуальный хост в Edge определяет протокол (HTTP или HTTPS), а также порт маршрутизатора и псевдоним хоста. Псевдоним хоста обычно представляет собой доменное имя DNS, которое сопоставляется с IP-адресом маршрутизатора.
Например, на изображении ниже показан маршрутизатор с двумя определениями виртуального хоста:
В этом примере есть два определения виртуального хоста. Один обрабатывает HTTPS-запросы в домене domainName1, а другой – HTTP-запросы в домене domainName2.
При запросе к прокси-серверу API маршрутизатор сравнивает заголовок Host и номер порта входящего запроса со списком псевдонимов хостов , определенных всеми виртуальными хостами, чтобы определить, какой виртуальный хост будет обрабатывать запрос.
Ниже приведены примеры конфигурации виртуальных хостов.
Антипаттерн
Если в одном или разных окружениях организации или в разных организациях определить несколько виртуальных хостов с одним и тем же псевдонимом хоста и номером порта, это приведет к путанице при маршрутизации запросов API и может вызвать неожиданные ошибки или поведение.
Рассмотрим пример, чтобы объяснить, что происходит, когда у нескольких виртуальных хостов один и тот же псевдоним хоста.
Предположим, что определены два виртуальных хоста sandbox and secure с одним и тем же псевдонимом хоста, то есть api.company.abc.com в среде:
При описанной выше настройке возможны два сценария, которые рассматриваются в следующих разделах.
Сценарий 1. Прокси API настроен на прием запросов только к одному из виртуальных хостов песочницы
<ProxyEndpoint name="default">
...
<HTTPProxyConnection>
<BasePath>/demo</BasePath>
<VirtualHost>sandbox</VirtualHost>
</HTTPProxyConnection>
...
</ProxyEndpoint>В этом случае, когда клиентские приложения вызывают определенный прокси API, используя псевдоним хоста api.company.abc.com, они периодически получают ошибки 404 со следующим сообщением:
Unable to identify proxy for host: secure
Это связано с тем, что маршрутизатор отправляет запросы на оба виртуальных хоста: sandbox и secure. Когда запросы направляются на виртуальный хост sandbox, клиентские приложения получают успешный ответ. Однако, когда запросы направляются на виртуальный хост secure, клиентские приложения получают ошибку 404, поскольку прокси API не настроен на прием запросов на виртуальном хосте secure.
Сценарий 2. Прокси API настроен на прием запросов к виртуальным хостам sandbox и secure
<ProxyEndpoint name="default">
...
<HTTPProxyConnection>
<BasePath>/demo</BasePath>
<VirtualHost>sandbox</VirtualHost>
<VirtualHost>secure</VirtualHost>
</HTTPProxyConnection>
...
</ProxyEndpoint>В этом случае, когда клиентские приложения вызывают определенный прокси API, используя псевдоним хоста api.company.abc.com, они получают действительный ответ на основе логики прокси.
Однако из-за этого в Аналитике сохраняются неверные данные, поскольку запросы API направляются на оба виртуальных хоста, хотя на самом деле должны были отправляться только на один.
Это также может повлиять на информацию в журналах и другие данные, основанные на виртуальных хостах.
Результат
- Ошибки 404, поскольку запросы API могут быть направлены на виртуальный хост, который не настроен на прием запросов от прокси API.
- Некорректные данные Аналитики, поскольку запросы API направляются на все виртуальные хосты с тем же псевдонимом хоста, хотя запросы были сделаны только для определенного виртуального хоста.
Рекомендации
- Не определяйте несколько виртуальных хостов с одним и тем же псевдонимом хоста и номером порта в одной среде или разных средах организации.
Если вам нужно определить несколько виртуальных хостов, используйте разные псевдонимы хостов в каждом из них, как показано ниже:
