Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
Симптом
Клиентское приложение получает в ответ на вызовы API HTTP-интерфейса код состояния 502 с сообщением "Bad Gateway" .
Код состояния HTTP 502 означает, что клиент не получает действительный ответ от серверной части, которая должна была бы фактически выполнить запрос.
Сообщения об ошибках
Клиентское приложение получает следующий код ответа:
HTTP/1.1 502 Bad Gateway
Кроме того, вы можете увидеть следующие сообщения об ошибках:
<html> <head> <title>Error</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>An error occurred.</h1> <p>Sorry, the page you are looking for is currently unavailable.<br/> Please try again later.</p> </body> </html>
Если ошибка исходит от бэкэнд-сервера, то вы можете увидеть что-то подобное. Сообщение об ошибке от бэкэнда полностью зависит от его реализации.
<html> <head><title>502 Bad Gateway</title></head> <body bgcolor="white"> <center><h1>502 Bad Gateway</h1></center> </body> </html>
Возможные причины
Вот несколько возможных причин, которые могут привести к ошибке 502 Bad Gateway для API, проходящих через Apigee Edge:
| Причина | Описание | Инструкции по устранению неполадок, применимые для |
| В списке кандидатов нет депутатов. | Эта ошибка наблюдается, если все участники пула недоступны, то есть они либо не работают, либо заняты и, следовательно, не отвечают. | Пользователи Edge Private Cloud |
| Неправильная конфигурация SSL между маршрутизаторами и точками управления. | Эта ошибка наблюдается, если в хранилище доверенных сертификатов маршрутизатора Edge отсутствует корневой сертификат клиента, подписанный центром сертификации. | Пользователи Edge Private Cloud |
| Ошибка от бэкэнд-сервера. | Эта ошибка будет наблюдаться, если серверная часть выйдет из строя и отправит этот ответ. | Пользователи публичных и частных облачных сервисов на периферии сети |
Причина: В списке кандидатов нет свободных депутатов.
Эта ошибка возникнет, если маршрутизатор обнаружит, что все обработчики сообщений в данном регионе/центре обработки данных недоступны (например, если все они вышли из строя).
Apigee Edge настроен таким образом, что входящий API-трафик (запросы) в данном регионе/центре обработки данных всегда направляется от маршрутизаторов к обработчикам сообщений (MP) в том же регионе/центре обработки данных. В некоторых случаях компоненты Apigee Edge могут быть настроены только в одном регионе/центре обработки данных, а в некоторых — в нескольких регионах/центрах обработки данных. В каждом регионе/центре обработки данных будет настроено два или более маршрутизатора и обработчиков сообщений.
Диагноз
- Если регионов/центров обработки данных несколько, определите регион/центр(ы), в котором запросы к API завершаются с ошибкой 502 Bad Gateway. Это можно сделать либо определив регион, в котором пользователи наблюдают ошибки 502, либо проверив журналы доступа NGINX в каталоге
/opt/apigee/var/log/edge-router/nginx/на каждом из маршрутизаторов, принадлежащих разным регионам. - В журналах ошибок NGINX (
/opt/apigee/var/log/edge-router/nginx/ORG-Env.вы увидите следующую ошибку._error_log /opt/apigee/var/log/edge-router/nginx/ORG-Env.)_error_log 2019/06/24 15:26:00 [error] 4796#4796: *56357443 no live upstreams while connecting to upstream, client: <Router_IP_address>, server: <HostAlias>, request: "PUT <BasePath> HTTP/1.1", upstream: "http://<ListOfMP-IP_R-MP-Port>/<BasePath>", host: "<HostAlias>"
Сценарий 1: Все обработчики сообщений не работают.
- Проверьте, работают ли обработчики сообщений в конкретном регионе/центре обработки данных.
- Если все обработчики сообщений не работают, перезапустите их.
Разрешение
Перезапустите все обработчики сообщений, используя следующую команду:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Сценарий 2: Все обработчики сообщений заняты обработкой текущих запросов.
Эта ошибка возникнет, если маршрутизатор обнаружит, что все обработчики сообщений в данном регионе/центре обработки данных недоступны, поскольку все они заняты обработкой текущих запросов.
- Проверьте, работают ли обработчики сообщений в конкретном регионе/центре обработки данных.
- Если все обработчики сообщений запущены и активны, проверьте, не испытывает ли обработчик(и) сообщений высокую загрузку ЦП, затем создавайте три дампа потоков каждые 30 секунд, используя следующую команду:
<JAVA_HOME>/bin/jstack -l <pid> > <filename>
- Если обработчик(и) сообщений испытывает(ют) высокую нагрузку на память, создайте дамп кучи с помощью следующей команды:
sudo -u apigee
/bin/jmap -dump:live,format=b,file= - Перезапустите обработчик сообщений, используя приведенную ниже команду. Это должно снизить нагрузку на процессор и память:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
- Отслеживайте вызовы API, чтобы убедиться, что проблема по-прежнему существует.
- Обратитесь в службу поддержки Apigee и предоставьте дампы потоков, дамп кучи и журналы обработчика сообщений (
/opt/apigee/var/log/edge-message-processor/logs/system.log), чтобы помочь в расследовании причин высокой загрузки ЦП/памяти.
Причина: Неправильная конфигурация SSL между маршрутизаторами и точками управления.
Диагноз
- Проверьте журналы доступа NGINX (
/opt/apigee/var/log/edge-router/nginx/ORG-Env.). Вы увидите ответ 502, как показано ниже:_access_log 2019-07-23T12:13:42+03:00 sc-10-254-226-23 10.X.X.X:53634 10.X.X.X:8998 0.000 - - 502 502 189 344 GET <path> curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2 <host alias> mp-10-254-226-23-23706-8552529-1 10.129.107.101 - - -1 - - dc-2 gateway-2 green - gateway-2 dc-2 op pilot http -
- Проверьте журналы ошибок NGINX (
/opt/apigee/var/log/edge-router/nginx/ORG-Env.). Вы увидите ошибки примерно такого вида:_error_log 2019/07/30 17:02:24 [error] 7691#7691: *11753633 peer closed connection in SSL handshake while SSL handshaking to upstream, client: X.X.X.X, server: <HostAlias>, request: "GET /no-target HTTP/1.1", upstream: "https://X.X.X.X:8998/no-target", host: "<HostAlias>"
- Это свидетельствует о сбое SSL-рукопожатия между маршрутизатором и обработчиком сообщений.
- Внимательно посмотрите на сообщение об ошибке в шагах № 1 и № 2: для связи с обработчиком сообщений используется порт 8998, который является незащищенным, но используется протокол SSL (https). Обычно используется защищенный порт 8443. Поскольку для защищенной связи используется незащищенный порт, это приводит к сбою рукопожатия SSL.
- Как правило, это может произойти, если вы пропустили какие-либо шаги или установили неверные значения при настройке SSL между маршрутизатором и обработчиком сообщений. Обратитесь к шагам, описанным здесь .
Например, эта ошибка может возникнуть, если- В файле
/opt/apigee/customer/application/message-processor.properties as shown belowconf/message-processor-communication.properties+local.http.port=8998
- Конфигурационные файлы маршрутизатора, расположенные в каталоге
/opt/nginx/conf.d/*не удаляются, и маршрутизатор не перезапускается во время настройки SSL. В этом случае вы можете заметить, что номер порта обработчиков сообщений останется равным 8998 в конфигурационных файлах.
- В файле
Разрешение
- Убедитесь, что все шаги, описанные в разделе «Настройка TLS между маршрутизатором и обработчиком сообщений», выполнены должным образом.
- Если проблема не исчезнет, перейдите в раздел «Сбор диагностической информации» .
Причина: Ошибка на серверной части.
Диагноз
- Если ошибка возникает каждый раз, вы можете записать трассировку пользовательского интерфейса для неудачных запросов. Выберите неудачный запрос и пройдите по различным этапам трассировки. Если вы заметите, что получаете ошибку «502 Bad Gateway» от самого бэкэнд-сервера, то проблема может быть связана с каким-либо сбоем на бэкэнд-сервере.
Трассировка показывает ошибку 502 Bad Gateway, поступающую от бэкэнд-сервера.
- Если проблема носит периодический характер и вам не удаётся получить трассировку,
- Если вы используете публичное облако, вы можете воспользоваться мониторингом API и проверить подробную информацию об ошибках 502.
- Если вы видите, что код ошибки —
messaging.adaptors.http.flow.ErrorResponseCode, а источник ошибки —target, то ошибка вызвана серверной частью.
- Если вы видите, что код ошибки —
- Если вы используете частное облако, вы можете проанализировать журналы доступа NGINX.
/opt/apigee/var/log/edge-router/nginx/ORG-Env._access_log.
Вы увидите запись о неудачном запросе в следующем виде:2017-02-24T14:42:12+00:00 rt-01 192.8.155.2:18118 192.168.84.166:8998 10.225 - - 502 502 440 0 GET /adv-eadlg-test/documents?type=doctype HTTP/1.1 rt-02efawae234-1234 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 myorg-dev.apigee.net rt-02efawae234-1234 6 - false target messaging.adaptors.http.flow.ErrorResponseCode null/null - /organizations/myorg/environments/dev/apiproxies/api123
- Если вы видите, что код ошибки —
messaging.adaptors.http.flow.ErrorResponseCode, а источник ошибки —target, то ошибка вызвана серверной частью.
- Если вы видите, что код ошибки —
- Если вы используете публичное облако, вы можете воспользоваться мониторингом API и проверить подробную информацию об ошибках 502.
Разрешение
- Обратитесь к команде разработчиков серверной части, чтобы устранить эту проблему на стороне бэкэнда.
Сбор диагностической информации
- Журналы доступа NGINX
(/opt/apigee/var/log/edge-router/nginx/ORG-Env.)_access_log
и журналы ошибок
(/opt/apigee/var/log/edge-router/nginx/ORG-Env.)._error_log - Журналы обработчика сообщений
(/opt/apigee/var/log/edge-message-processor/logs/system.log).