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

Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X.
информация

Симптом

Клиентское приложение получает код состояния HTTP 502 с сообщением «Плохой шлюз» в качестве ответа на вызовы API.

Код состояния 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:

Причина Описание Инструкции по устранению неполадок применимы для
В пуле нет доступных депутатов Эта ошибка наблюдается, если все MP в пуле недоступны, то есть они либо неактивны, либо заняты и, следовательно, не отвечают. Пользователи Edge Private Cloud
Неправильная конфигурация SSL между маршрутизаторами и MP. Эта ошибка наблюдается, если корневой сертификат, подписанный ЦС клиента, отсутствует в хранилище доверенных сертификатов маршрутизатора Edge. Пользователи Edge Private Cloud
Ошибка внутреннего сервера Эта ошибка будет наблюдаться, если внутренний сервер выйдет из строя и отправит этот ответ. Пользователи Edge Public и 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 между маршрутизаторами и MP.

Диагностика

  1. Проверьте журналы доступа NGINX ( /opt/apigee/var/log/edge-router/nginx/ORG-Env. _access_log /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 /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. Номер порта указан как 8998 вместо 8443 в /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. /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. _access_log )
    и журналы ошибок
    ( /opt/apigee/var/log/edge-router/nginx/ORG-Env. _error_log /opt/apigee/var/log/edge-router/nginx/ORG-Env. _error_log ).
  2. Журналы процессора сообщений
    ( /opt/apigee/var/log/edge-message-processor/logs/system.log ).