502 Неверный шлюз

Вы просматриваете документацию 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 могут быть настроены только в одном регионе/центре обработки данных, а в некоторых — в нескольких регионах/центрах обработки данных. В каждом регионе/центре обработки данных будет настроено два или более маршрутизатора и обработчиков сообщений.

Диагноз

  1. Если регионов/центров обработки данных несколько, определите регион/центр(ы), в котором запросы к API завершаются с ошибкой 502 Bad Gateway. Это можно сделать либо определив регион, в котором пользователи наблюдают ошибки 502, либо проверив журналы доступа NGINX в каталоге /opt/apigee/var/log/edge-router/nginx/ на каждом из маршрутизаторов, принадлежащих разным регионам.
  2. В журналах ошибок 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: Все обработчики сообщений не работают.

  1. Проверьте, работают ли обработчики сообщений в конкретном регионе/центре обработки данных.
  2. Если все обработчики сообщений не работают, перезапустите их.

Разрешение

Перезапустите все обработчики сообщений, используя следующую команду:

/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Сценарий 2: Все обработчики сообщений заняты обработкой текущих запросов.

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

  1. Проверьте, работают ли обработчики сообщений в конкретном регионе/центре обработки данных.
  2. Если все обработчики сообщений запущены и активны, проверьте, не испытывает ли обработчик(и) сообщений высокую загрузку ЦП, затем создавайте три дампа потоков каждые 30 секунд, используя следующую команду:
    <JAVA_HOME>/bin/jstack -l <pid> > <filename>
  3. Если обработчик(и) сообщений испытывает(ют) высокую нагрузку на память, создайте дамп кучи с помощью следующей команды:
    sudo -u apigee /bin/jmap -dump:live,format=b,file= 
  4. Перезапустите обработчик сообщений, используя приведенную ниже команду. Это должно снизить нагрузку на процессор и память:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  5. Отслеживайте вызовы API, чтобы убедиться, что проблема по-прежнему существует.
  6. Обратитесь в службу поддержки Apigee и предоставьте дампы потоков, дамп кучи и журналы обработчика сообщений ( /opt/apigee/var/log/edge-message-processor/logs/system.log ), чтобы помочь в расследовании причин высокой загрузки ЦП/памяти.

Причина: Неправильная конфигурация SSL между маршрутизаторами и точками управления.

Диагноз

  1. Проверьте журналы доступа NGINX ( /opt/apigee/var/log/edge-router/nginx/ORG-Env. _access_log ). Вы увидите ответ 502, как показано ниже:
        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	-
  2. Проверьте журналы ошибок 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>"
  3. Это свидетельствует о сбое SSL-рукопожатия между маршрутизатором и обработчиком сообщений.
  4. Внимательно посмотрите на сообщение об ошибке в шагах № 1 и № 2: для связи с обработчиком сообщений используется порт 8998, который является незащищенным, но используется протокол SSL (https). Обычно используется защищенный порт 8443. Поскольку для защищенной связи используется незащищенный порт, это приводит к сбою рукопожатия SSL.
  5. Как правило, это может произойти, если вы пропустили какие-либо шаги или установили неверные значения при настройке SSL между маршрутизатором и обработчиком сообщений. Обратитесь к шагам, описанным здесь .
    Например, эта ошибка может возникнуть, если
    1. В файле /opt/apigee/customer/application/message-processor.properties as shown below
              conf/message-processor-communication.properties+local.http.port=8998
    2. Конфигурационные файлы маршрутизатора, расположенные в каталоге /opt/nginx/conf.d/* не удаляются, и маршрутизатор не перезапускается во время настройки SSL. В этом случае вы можете заметить, что номер порта обработчиков сообщений останется равным 8998 в конфигурационных файлах.

Разрешение

  1. Убедитесь, что все шаги, описанные в разделе «Настройка TLS между маршрутизатором и обработчиком сообщений», выполнены должным образом.
  2. Если проблема не исчезнет, ​​перейдите в раздел «Сбор диагностической информации» .

Причина: Ошибка на серверной части.

Диагноз

  1. Если ошибка возникает каждый раз, вы можете записать трассировку пользовательского интерфейса для неудачных запросов. Выберите неудачный запрос и пройдите по различным этапам трассировки. Если вы заметите, что получаете ошибку «502 Bad Gateway» от самого бэкэнд-сервера, то проблема может быть связана с каким-либо сбоем на бэкэнд-сервере.
    Трассировка показывает ошибку 502 Bad Gateway, поступающую от бэкэнд-сервера.
  2. Если проблема носит периодический характер и вам не удаётся получить трассировку,
    1. Если вы используете публичное облако, вы можете воспользоваться мониторингом API и проверить подробную информацию об ошибках 502.
      1. Если вы видите, что код ошибки — messaging.adaptors.http.flow.ErrorResponseCode , а источник ошибки — target , то ошибка вызвана серверной частью.
    2. Если вы используете частное облако, вы можете проанализировать журналы доступа 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
      1. Если вы видите, что код ошибки — messaging.adaptors.http.flow.ErrorResponseCode , а источник ошибки — target , то ошибка вызвана серверной частью.

Разрешение

  1. Обратитесь к команде разработчиков серверной части, чтобы устранить эту проблему на стороне бэкэнда.

Сбор диагностической информации

  1. Журналы доступа NGINX
    ( /opt/apigee/var/log/edge-router/nginx/ORG-Env. _access_log )
    и журналы ошибок
    ( /opt/apigee/var/log/edge-router/nginx/ORG-Env. _error_log ).
  2. Журналы обработчика сообщений
    ( /opt/apigee/var/log/edge-message-processor/logs/system.log ).