503 Служба недоступна. Не удалось создать прокси-туннель с ошибкой 403.

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

403 - Forbidden

Возможно, это может произойти из-за ограничений брандмауэра или ACL, настроенных на внутреннем сервере, которые предотвращают создание туннеля.

Прокси отказался создать туннель со статусом ответа 503

503 - Service Unavailable

Это может произойти из-за проблем с DNS, ограничений брандмауэра, недоступности внутреннего сервера, что препятствует созданию туннеля.

Прокси отказался создать туннель со статусом ответа 504.

504 - Gateway Timeout

Это может произойти, если при создании туннеля возникли таймауты.

В зависимости от кода состояния, указанного в faultstring , вам необходимо использовать соответствующие методы для устранения проблемы. В этом руководстве объясняется, как устранить проблему, если вы заметили код состояния 403 в faultstring для кода ошибки protocol.http.ProxyTunnelCreationFailed .

Возможные причины

Эта ошибка (код состояния 403 ) возникает, если на внутреннем сервере настроены какие-либо ограничения брандмауэра или ACL (списка управления доступом), которые препятствуют созданию туннеля между Apigee Edge и внутренним сервером прокси-сервером.

Причина Описание Инструкции по устранению неполадок применимы для
Прокси отказался создать туннель со статусом ответа 403. Прокси-сервер отказывается создавать туннель, поскольку он получает имя хоста прокси-сервера вместо имени хоста внутреннего сервера в заголовке Host . Только для пользователей Edge Private Cloud

Общие этапы диагностики

Для диагностики этой ошибки используйте один из следующих инструментов/методов:

Инструмент трассировки

Чтобы диагностировать ошибку с помощью инструмента трассировки:

  1. Включите сеанс трассировки и выполните одно из следующих действий:
    • Дождитесь возникновения ошибки или
    • Если вы можете воспроизвести проблему, выполните вызов API, чтобы воспроизвести проблему. 503 Service Unavailable с Proxy refused to create tunnel with response status 403 .
  2. Убедитесь, что параметр «Показать все FlowInfos» включен:

  3. Выберите один из неудачных запросов и проверьте трассировку.
  4. Перемещайтесь по различным этапам трассировки и найдите место, где произошел сбой.
  5. Обычно вы увидите ошибку после начала фазы целевого потока запросов , как показано ниже:

    Обратите внимание на следующую информацию:

    ошибка: Proxy refused to create tunnel with response status 403

  6. Перейдите к этапу AX (записанные аналитические данные) в трассировке и щелкните его.
  7. Прокрутите вниз до раздела «Заголовки ответов с подробностями фазы» и определите значения X-Apigee-fault-code и X-Apigee-fault-source, как показано ниже:

    ( просмотреть увеличенное изображение )

    ( просмотреть увеличенное изображение )

  8. Вы увидите значения X-Apigee-fault-code и X-Apigee-fault-source как protocol.http.ProxyTunnelCreationFailed и target соответственно, указывая, что эта ошибка вызвана тем, что создание прокси-туннеля не удалось, поскольку ожидаемый заголовок хоста не получен.

    Заголовки ответов Ценить
    X-Apigee-код неисправности protocol.http.ProxyTunnelCreationFailed
    X-Apigee-источник-ошибки target

НГИНКС

Чтобы диагностировать ошибку с помощью журналов доступа NGINX:

  1. Если вы являетесь пользователем частного облака , вы можете использовать журналы доступа NGINX для определения ключевой информации об ошибках HTTP 503 Service Unavailable .
  2. Проверьте журналы доступа NGINX:

    /opt/apigee/var/log/edge-router/nginx/ ORG ~ ORG . PORT# _access_log

    Где: ORG , ORG и PORT# заменяются фактическими значениями.

  3. Выполните поиск, чтобы узнать, есть ли какие-либо ошибки 503 с кодом ошибки protocol.http.ProxyTunnelCreationFailed в течение определенного периода времени (если проблема возникла в прошлом) или есть ли какие-либо запросы, которые по-прежнему завершаются с ошибкой 503 .
  4. Если вы обнаружите какие-либо ошибки 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.

Диагностика

  1. Определите код неисправности и источник неисправности для ошибки 503 Service Unavailable с помощью инструмента трассировки или журналов доступа NGINX, как описано в разделе «Общие этапы диагностики» .
  2. Просмотрите сообщение об ошибке и определите код состояния , указанный в faultstring для сбоя при создании туннеля.
  3. В этом сценарии код состояния — 403 , что означает «Запрещено» .
  4. Это означает, что для создания туннеля недостаточно прав или привилегий. Обычно это может произойти, если существуют какие-либо ограничения брандмауэра или ACL (списка управления доступом), которые препятствуют созданию туннеля.
  5. Просмотрите все ограничения брандмауэра и/или ACL, настроенные на вашем внутреннем сервере, которые могут помешать созданию туннеля.
  6. В зависимости от типа ограничений брандмауэра и/или ACL вам необходимо устранить проблему соответствующим образом.
  7. Давайте рассмотрим пример ограничения брандмауэра, чтобы объяснить, как устранить и решить эту проблему:

    Сценарий: ограничение брандмауэра на внутреннем сервере предполагает, что заголовок хоста всегда должен содержать имя хоста внутреннего сервера.

    Вы можете использовать один из следующих способов определить заголовок хоста, передаваемый Apigee Edge:

    След

    Чтобы определить заголовок хоста с помощью Trace:

    1. Убедитесь, что faultstring содержит Proxy refused to create tunnel with response status 403 используя трассировку, как описано в разделе «Общие шаги диагностики» .
    2. Перейдите к этапу «Начался целевой поток запросов» и просмотрите заголовки запросов.
    3. Проверьте значение имени хоста, указанного в заголовке Host в разделе Заголовки запросов .
    4. Если заголовок Host содержит имя прокси-хоста , это и есть причина данной ошибки.
    5. Это связано с тем, что брандмауэр на внутреннем сервере настроен на прием запросов только в том случае, если заголовок хоста содержит имя внутреннего сервера .
    6. Поэтому, когда прокси-сервер пытается создать туннель с внутренним сервером, он терпит неудачу с ошибкой.

      Proxy refused to create tunnel with response status 403 .

      Пример трассировки, показывающий заголовок хоста с именем прокси-хоста

      ( просмотреть увеличенное изображение )

      В приведенном выше примере трассировки показано, что заголовок хоста содержит имя прокси-хоста www.proxyserver.com . Поскольку на внутреннем сервере настроено ограничение брандмауэра, согласно которому в заголовке хоста должно содержаться только имя хоста внутреннего сервера, вы получаете сообщение об ошибке Proxy refused to create tunnel with response status 403 .

    tcpdump

    Чтобы определить заголовок хоста с помощью tcpdump

    1. Запишите tcpdump на прокси-сервере для запросов, поступающих от компонента процессора сообщений Apigee Edge, с помощью следующей команды:

      tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
      

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

    2. Проанализируйте данные tcpdump с помощью инструмента Wireshark или аналогичного инструмента.
    3. Вот пример анализа tcpdump с использованием Wireshark:

      ( просмотреть увеличенное изображение )

    4. Номера пакетов 13 , 14 и 15 показывают, что процессор сообщений устанавливает соединение с прокси-сервером посредством трехстороннего процесса подтверждения TCP.
    5. В пакете 16 процессор сообщений подключился к прокси-узлу httpbin.org (показан в примере выше).
    6. Выберите пакет 16 и подробно изучите его содержимое, в частности заголовок хоста , передаваемый процессором сообщений на прокси-сервер.

    7. В приведенном выше примере показан заголовок хоста httpin.org , который является именем хоста прокси-сервера. Таким образом, когда прокси-сервер пытается создать туннель с внутренним сервером, передав указанный выше заголовок хоста httpin.org , он терпит неудачу с ошибкой. Proxy refused to create tunnel with response status 403 .

Разрешение

Сценарий: ограничение брандмауэра на прокси-сервере предполагает, что заголовок хоста всегда должен содержать имя хоста внутреннего сервера.

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

  1. Установите для свойства 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>
  2. Убедитесь, что другие свойства, связанные с прокси-сервером пересылки, настроены в процессоре сообщений следующим образом:

    1. Просмотрите файл /opt/apigee/customer/application/message-processor.properties на каждом из процессоров сообщений.
    2. Убедитесь, что следующие свойства установлены в соответствии с вашим вариантом использования или требованиями:

      Примеры значений свойств:

      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

Ссылки