Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X. информация
Симптом
Клиентское приложение получает код состояния HTTP 503 Service Unavailable
с кодом ошибки protocol.http.ProxyTunnelCreationFailed
в качестве ответа на вызовы API.
Сообщение об ошибке
Клиентское приложение получает следующий код ответа:
HTTP/1.1 503 Service Unavailable
Кроме того, вы можете увидеть следующее сообщение об ошибке:
{ "fault":{ "faultstring":"Proxy refused to create tunnel with response status 403", "detail":{ "errorcode":"protocol.http.ProxyTunnelCreationFailed" } } }
Переадресация прокси и туннелирование
Apigee Edge позволяет вашим прокси-серверам API взаимодействовать с вашим внутренним сервером через прокси-сервер, как описано в разделе «Настройка прямого прокси» . Прокси-сервер открывает безопасное (HTTPS) или незащищенное (HTTP) соединение с внутренним сервером в зависимости от используемого типа прокси ( указанного свойством HTTPClient.proxy.type
) и передает данные в обоих направлениях. Это известно как туннелирование .
По умолчанию Apigee Edge использует туннелирование для всего трафика. Чтобы отключить туннелирование, для свойства HTTPClient.use.tunneling
необходимо установить значение false
.
Код ошибки: протокол.http.ProxyTunnelCreationFailed
Apigee Edge возвращает код ошибки protocol.http.ProxyTunnelCreationFailed
, если прокси-сервер не может создать туннель между Apigee Edge и внутренним сервером из-за каких-либо проблем, таких как брандмауэр, ограничения ACL (список управления доступом), проблемы DNS, недоступность внутреннего сервера. , таймауты и т. д.
Код состояния в faultstring
ответа Apigee Edge обычно указывает на возможную причину высокого уровня, которая привела к этой ошибке.
Шаблон строки неисправности:
Proxy refused to create tunnel with response status STATUS_CODE
Возможные причины некоторых кодов состояния, наблюдаемых в строке неисправности:
В следующей таблице описаны возможные причины в зависимости от кода состояния, указанного в faultstring
:
Строка разлома | Описание |
---|---|
Прокси отказался создать туннель со статусом ответа 403 | Возможно, это может произойти из-за ограничений брандмауэра или ACL, настроенных на внутреннем сервере, которые предотвращают создание туннеля. |
Прокси отказался создать туннель со статусом ответа 503 | Это может произойти из-за проблем с DNS, ограничений брандмауэра, недоступности внутреннего сервера, что препятствует созданию туннеля. |
Прокси отказался создать туннель со статусом ответа 504. | Это может произойти, если при создании туннеля возникли таймауты. |
В зависимости от кода состояния, указанного в faultstring
, вам необходимо использовать соответствующие методы для устранения проблемы. В этом руководстве объясняется, как устранить проблему, если вы заметили код состояния 403
в faultstring
для кода ошибки protocol.http.ProxyTunnelCreationFailed
.
Возможные причины
Эта ошибка (код состояния 403
) возникает, если на внутреннем сервере настроены какие-либо ограничения брандмауэра или ACL (списка управления доступом), которые препятствуют созданию туннеля между Apigee Edge и внутренним сервером прокси-сервером.
Причина | Описание | Инструкции по устранению неполадок применимы для |
---|---|---|
Прокси отказался создать туннель со статусом ответа 403. | Прокси-сервер отказывается создавать туннель, поскольку он получает имя хоста прокси-сервера вместо имени хоста внутреннего сервера в заголовке Host . | Только для пользователей Edge Private Cloud |
Общие этапы диагностики
Для диагностики этой ошибки используйте один из следующих инструментов/методов:
Инструмент трассировки
Чтобы диагностировать ошибку с помощью инструмента трассировки:
- Включите сеанс трассировки и выполните одно из следующих действий:
- Дождитесь возникновения ошибки или
- Если вы можете воспроизвести проблему, выполните вызов API, чтобы воспроизвести проблему.
503 Service Unavailable
сProxy refused to create tunnel with response status 403
.
Убедитесь, что параметр «Показать все FlowInfos» включен:
- Выберите один из неудачных запросов и проверьте трассировку.
- Перемещайтесь по различным этапам трассировки и найдите место, где произошел сбой.
Обычно вы увидите ошибку после начала фазы целевого потока запросов , как показано ниже:
Обратите внимание на следующую информацию:
ошибка:
Proxy refused to create tunnel with response status 403
- Перейдите к этапу AX (записанные аналитические данные) в трассировке и щелкните его.
Прокрутите вниз до раздела «Заголовки ответов с подробностями фазы» и определите значения X-Apigee-fault-code и X-Apigee-fault-source, как показано ниже:
Вы увидите значения X-Apigee-fault-code и X-Apigee-fault-source как
protocol.http.ProxyTunnelCreationFailed
иtarget
соответственно, указывая, что эта ошибка вызвана тем, что создание прокси-туннеля не удалось, поскольку ожидаемый заголовок хоста не получен.Заголовки ответов Ценить X-Apigee-код неисправности protocol.http.ProxyTunnelCreationFailed
X-Apigee-источник-ошибки target
НГИНКС
Чтобы диагностировать ошибку с помощью журналов доступа NGINX:
- Если вы являетесь пользователем частного облака , вы можете использовать журналы доступа NGINX для определения ключевой информации об ошибках HTTP
503 Service Unavailable
. Проверьте журналы доступа NGINX:
/opt/apigee/var/log/edge-router/nginx/ ORG ~ ORG . PORT# _access_log
Где: ORG , ORG и PORT# заменяются фактическими значениями.
- Выполните поиск, чтобы узнать, есть ли какие-либо ошибки
503
с кодом ошибкиprotocol.http.ProxyTunnelCreationFailed
в течение определенного периода времени (если проблема возникла в прошлом) или есть ли какие-либо запросы, которые по-прежнему завершаются с ошибкой503
. Если вы обнаружите какие-либо ошибки
503
с кодом X-Apigee-fault-code , соответствующим значениюprotocol.http.ProxyTunnelCreationFailed
, определите значение X-Apigee-fault-source.Пример ошибки 503 из журнала доступа NGINX:
Приведенный выше пример записи из журнала доступа NGINX имеет следующие значения для X-Apigee-fault-code и X-Apigee-fault-source:
Заголовки ответов Ценить X-Apigee-код неисправности protocol.http.ProxyTunnelCreationFailed
X-Apigee-источник-ошибки target
Причина: Прокси отказался создать туннель со статусом ответа 403.
Диагностика
- Определите код неисправности и источник неисправности для ошибки
503 Service Unavailable
с помощью инструмента трассировки или журналов доступа NGINX, как описано в разделе «Общие этапы диагностики» . - Просмотрите сообщение об ошибке и определите код состояния , указанный в
faultstring
для сбоя при создании туннеля. - В этом сценарии код состояния —
403
, что означает «Запрещено» . - Это означает, что для создания туннеля недостаточно прав или привилегий. Обычно это может произойти, если существуют какие-либо ограничения брандмауэра или ACL (списка управления доступом), которые препятствуют созданию туннеля.
- Просмотрите все ограничения брандмауэра и/или ACL, настроенные на вашем внутреннем сервере, которые могут помешать созданию туннеля.
- В зависимости от типа ограничений брандмауэра и/или ACL вам необходимо устранить проблему соответствующим образом.
Давайте рассмотрим пример ограничения брандмауэра, чтобы объяснить, как устранить и решить эту проблему:
Сценарий: ограничение брандмауэра на внутреннем сервере предполагает, что заголовок хоста всегда должен содержать имя хоста внутреннего сервера.
Вы можете использовать один из следующих способов определить заголовок хоста, передаваемый Apigee Edge:
След
Чтобы определить заголовок хоста с помощью Trace:
- Убедитесь, что
faultstring
содержитProxy refused to create tunnel with response status 403
используя трассировку, как описано в разделе «Общие шаги диагностики» . - Перейдите к этапу «Начался целевой поток запросов» и просмотрите заголовки запросов.
- Проверьте значение имени хоста, указанного в заголовке Host в разделе Заголовки запросов .
- Если заголовок Host содержит имя прокси-хоста , это и есть причина данной ошибки.
- Это связано с тем, что брандмауэр на внутреннем сервере настроен на прием запросов только в том случае, если заголовок хоста содержит имя внутреннего сервера .
- Поэтому, когда прокси-сервер пытается создать туннель с внутренним сервером, он терпит неудачу с ошибкой.
Proxy refused to create tunnel with response status 403
.Пример трассировки, показывающий заголовок хоста с именем прокси-хоста
( просмотреть увеличенное изображение )
В приведенном выше примере трассировки показано, что заголовок хоста содержит имя прокси-хоста
www.proxyserver.com .
Поскольку на внутреннем сервере настроено ограничение брандмауэра, согласно которому в заголовке хоста должно содержаться только имя хоста внутреннего сервера, вы получаете сообщение об ошибкеProxy refused to create tunnel with response status 403
.
tcpdump
Чтобы определить заголовок хоста с помощью tcpdump
Запишите
tcpdump
на прокси-сервере для запросов, поступающих от компонента процессора сообщений Apigee Edge, с помощью следующей команды:tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
Дополнительные сведения об использовании команды
tcpdump
см. в разделе tcpdump .- Проанализируйте данные
tcpdump
с помощью инструмента Wireshark или аналогичного инструмента. Вот пример анализа tcpdump с использованием Wireshark:
- Номера пакетов 13 , 14 и 15 показывают, что процессор сообщений устанавливает соединение с прокси-сервером посредством трехстороннего процесса подтверждения TCP.
- В пакете 16 процессор сообщений подключился к прокси-узлу
httpbin.org
(показан в примере выше). Выберите пакет 16 и подробно изучите его содержимое, в частности заголовок хоста , передаваемый процессором сообщений на прокси-сервер.
- В приведенном выше примере показан заголовок хоста
httpin.org
, который является именем хоста прокси-сервера. Таким образом, когда прокси-сервер пытается создать туннель с внутренним сервером, передав указанный выше заголовок хостаhttpin.org
, он терпит неудачу с ошибкой.Proxy refused to create tunnel with response status 403
.
- Убедитесь, что
Разрешение
Сценарий: ограничение брандмауэра на прокси-сервере предполагает, что заголовок хоста всегда должен содержать имя хоста внутреннего сервера.
Если вы убедились, что эта ошибка вызвана тем, что брандмауэр на внутреннем сервере настроен таким образом, что он ожидает, что заголовок хоста всегда должен содержать имя хоста внутреннего сервера, в то время как процессор сообщений отправляет имя хоста прокси-сервера , выполните следующие шаги для устранения проблемы. проблема:
Установите для свойства
use.proxy.host.header.with.target.uri
значение true в TargetEndpoint, как показано в следующем примере:Пример конфигурации TargetEndpoint:
<TargetEndpoint name="default"> <HTTPTargetConnection> <URL>https://mocktarget.apigee.net/json</URL> <Properties> <Property name="use.proxy.host.header.with.target.uri">true</Property> </Properties> </HTTPTargetConnection> </TargetEndpoint>
Убедитесь, что другие свойства, связанные с прокси-сервером пересылки, настроены в процессоре сообщений следующим образом:
- Просмотрите файл
/opt/apigee/customer/application/message-processor.properties
на каждом из процессоров сообщений. Убедитесь, что следующие свойства установлены в соответствии с вашим вариантом использования или требованиями:
Примеры значений свойств:
conf_http_HTTPClient.use.proxy=true conf/http.properties+HTTPClient.proxy.type=HTTP conf/http.properties+HTTPClient.proxy.host=PROXY_SERVER_HOST_NAME conf/http.properties+HTTPClient.proxy.port=PORT_# conf/http.properties+HTTPClient.proxy.user=USERNAME conf/http.properties+HTTPClient.proxy.password=PASSWORD
- Просмотрите файл
Необходимо собрать диагностическую информацию
Если проблема не устранена даже после выполнения приведенных выше инструкций, соберите следующую диагностическую информацию, а затем обратитесь в службу поддержки Apigee Edge :
Если вы являетесь пользователем частного облака , предоставьте следующую информацию:
- Полное сообщение об ошибке, наблюдаемое для неудачных запросов
- Имя среды
- Пакет прокси API
- Файл трассировки запросов API
Журналы доступа NGINX
/opt/apigee/var/log/edge-router/nginx/ ORG ~ ENV . PORT# _access_log
Где: ORG , ENV и PORT# заменяются фактическими значениями.
Системные журналы процессора сообщений
/opt/apigee/var/log/edge-message-processor/logs/system.log