500 Internal Server Error - Backend Server (500 Внутренняя ошибка сервера – серверная часть)

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

Видео

Видео Описание
500 Internal Server Error (Внутренняя ошибка сервера) – ошибка, вызванная серверной частью Показывает ошибку 500 Internal Server Error, вызванную внутренним сервером, а также шаги по устранению неполадки.

Symptom

Клиентское приложение получает код статуса HTTP 500 с сообщением Internal Server Error в качестве ответа на вызовы API.

Код статуса HTTP 500 – это общий ответ об ошибке. Это означает, что сервер столкнулся с непредвиденной ситуацией, которая помешала ему выполнить запрос. Обычно эта ошибка возвращается сервером, когда не подходит ни один другой код ошибки.

Сообщения об ошибках

Клиентское приложение получает следующий код ответа:

HTTP/1.1 500 Internal Server Error

Кроме того, вы можете увидеть сообщение об ошибке, похожее на приведенное ниже:

Пример 1

Пример ответа внутреннего сервера 1

{"errorMessage":"Sorry either your e-mail or password didn't match.",
"errorParameters":"{}",
"errorCode":"500",
"errorKey":"INVALID_EMAILPASSWORD"}

Пример 2

Пример ответа внутреннего сервера 2

<Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <Body>
      <Error>
         <code>500</code>
         <message xml:lang="en-US">Not Authorised(e4138fa0-ec57).</message>
      </Error>
   </Body>
</Envelope>

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

Код ошибки 500 Internal Server Error может быть возвращен внутренним сервером по нескольким причинам. В этом руководстве описаны стандартные действия по устранению неполадок, которые помогут вам исправить ошибку независимо от ее причины.

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

Причина Описание Инструкции по устранению неполадок, применимые к
Ошибка на внутреннем сервере Внутренний сервер может не работать по какой-либо причине. Пользователи частного и общедоступного облака Edge

Распространенные этапы диагностики

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

Мониторинг API

Способ 1. Используйте API Monitoring

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

  1. Войдите в интерфейс Apigee Edge как пользователь с подходящей ролью.
  2. Перейдите к организации, в которой хотите изучить проблему.

  3. Перейдите на страницу Анализ > Мониторинг API > Исследование.
  4. Выберите период времени, в течение которого вы наблюдали ошибки.
  5. Постройте график Код ошибки по оси Y и Время по оси X.

  6. Выберите ячейку с кодом ошибки messaging.adaptors.http.flow.ErrorResponseCode, как показано ниже:

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

  7. Информация о коде ошибки messaging.adaptors.http.flow.ErrorResponseCode будет показана так, как указано ниже:

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

  8. Нажмите Посмотреть журналы и разверните строку с неудачным запросом.

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

  9. В окне Журналы обратите внимание на следующие сведения:
    • Идентификатор запроса
    • Код статуса: 500.
    • Источник ошибки: target
    • Код ошибки: messaging.adaptors.http.flow.ErrorResponseCode

Трассировка

Процедура 2. Использование инструмента трассировки

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

  1. Включите трассировку сеанса и выберите один из следующих вариантов:
    • Дождитесь ошибки 500 Internal Server Error с кодом ошибки messaging.adaptors.http.flow.ErrorResponseCode или
    • Если проблему можно воспроизвести, сделайте вызов API, чтобы воспроизвести ее. 500 Internal Server Error
  2. Убедитесь, что включен параметр Показывать все FlowInfo:

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

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

  6. Перейдите к фазе AX (запись данных аналитики) в трассировке и нажмите на нее.
  7. Прокрутите страницу вниз до раздела Phase Details Response Headers (Заголовки ответов с информацией об этапе) и определите значения X-Apigee-fault-code, X-Apigee-fault-source и X-Apigee-Message-ID, как показано ниже:

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

  8. Запишите значения X-Apigee-fault-code, X-Apigee-fault-source и X-Apigee-Message-ID:
  9. Заголовки ответа Значение
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
    X-Apigee-fault-source target
    X-Apigee-Message-ID MESSAGE_ID

nginx

Процедура 3. Использование журналов доступа NGINX

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

  1. Если вы используете частное облако, то можете использовать журналы доступа NGINX, чтобы определить ключевую информацию об HTTP 500 Internal Server Error.
  2. Проверьте журналы доступа NGINX:

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

  3. Выполните поиск, чтобы узнать, возникали ли ошибки 500 с кодом messaging.adaptors.http.flow.ErrorResponseCode в определенный период времени (если проблема возникла в прошлом) или есть ли запросы, которые по-прежнему завершаются с ошибкой 500.
  4. Если вы обнаружите ошибки 500, в которых X-Apigee-fault-code соответствует значению messaging.adaptors.http.flow.ErrorResponseCode, определите значение X-Apigee-fault-source.

    Пример ошибки 500 из журнала доступа NGINX:

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

    В приведенной выше записи из журнала доступа NGINX для атрибутов X-Apigee-fault-code и X-Apigee-fault-source заданы следующие значения:

    заголовки; Значение
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
    X-Apigee-fault-source target

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

диагностика;

Ответ 500 Internal Server Error от внутреннего сервера может быть вызван разными причинами. В каждом случае вам нужно будет проводить диагностику отдельно.

  1. Определите код ошибки и источник ошибки, используя мониторинг API, инструмент трассировки или журналы доступа NGINX, как описано в разделе Распространенные этапы диагностики.
  2. Если в поле Источник ошибки указано значение target, а в поле Код ошибки – messaging.adaptors.http.flow.ErrorResponseCode, это означает, что ошибка возвращена внутренним сервером.
  3. Чтобы определить причину проблемы, выполните одно из следующих действий:

    Трассировка

    Как использовать трассировку

    Если у вас есть сеанс трассировки для сбоя, выполните следующие действия:

    1. В трассировке выберите запрос к API, который не удалось выполнить с ошибкой 500 Internal Server Error.
    2. Выберите этап Ответ, полученный от целевого сервера из неудачного запроса к API, как показано на рисунке ниже.

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

    3. Прокрутите страницу вниз до раздела Phase Details (Сведения об этапе) и проверьте Response Content (Контент ответа),в котором содержится ответ от внутреннего сервера.

      Пример ответа

      <Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
         <Body>
            <Error>
               <code>500</code>
               <message xml:lang="en-US">Not Authorised(e4138fa0-ec57).</message>
            </Error>
         </Body>
      </Envelope>

      В приведенном выше ответе обратите внимание на сообщение об ошибке от внутреннего сервера: Не авторизован. Это означает, что пользователь, возможно, указал недействительные учетные данные, поэтому и возникает ошибка.

    Вызов бэкенд-сервера

    Прямой вызов внутреннего сервера

    Вы можете напрямую позвонить на сервер и:

    • Проверьте, получаете ли вы тот же ответ, 500 Internal Server Error что и при отправке запроса через Apigee Edge.
    • Проверьте сообщение об ошибке (ответ), полученное от внутреннего сервера.

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

    1. Убедитесь, что у вас есть все необходимые заголовки, параметры запроса и учетные данные, которые нужно передать на серверную часть в составе запроса.
    2. Если бэкенд-служба общедоступна, вы можете использовать команду curl, Postman или любой другой клиент REST и напрямую вызвать API серверной службы.
    3. Если бэкенд-сервер доступен только из Message Processors, то вы можете использовать команду curl, Postman или любой другой REST-клиент и вызвать API бэкенд-сервера напрямую из Message Processor.

    4. Убедитесь, что бэкенд-служба действительно возвращает 500 Internal Server Error, и проверьте сообщение об ошибке (ответ), возвращенное бэкенд-сервером, чтобы определить причину ошибки.

    Журналы бэкенд-сервера

    Как использовать журналы внутреннего сервера

    1. Проверьте журналы внутреннего сервера и попытайтесь получить больше информации об ошибке и ее причине.
    2. Если возможно, включите режим отладки на внутреннем сервере, чтобы получить более подробную информацию об ошибке и ее причине.
  4. Проверьте, используется ли цепочка прокси в целевой конечной точке, из-за которой возникает ошибка в прокси API. Иными словами, проверьте, вызывает ли целевой сервер или целевая конечная точка другой прокси в Apigee Edge. Чтобы определить, так ли это:

    1. Если у вас есть трассировка для запроса, который не удалось выполнить, перейдите к этапу Запрос отправлен на целевой сервер и нажмите Показать Curl.

    2. Откроется окно Curl for Request Sent to Target Server (Команда Curl для запроса, отправленного на целевой сервер), в котором можно определить псевдоним хоста целевого сервера.
    3. Проверьте целевую конечную точку прокси API и убедитесь, что URL или имя хоста целевого сервера указывает на другой прокси или ваш собственный сервер.
    4. Если псевдоним хоста целевого сервера указывает на псевдоним виртуального хоста, то это цепочка прокси. В этом случае вам нужно повторить все описанные выше шаги для цепочки прокси-серверов, пока вы не определите, что именно вызывает ошибку 500 Internal Server Error. В таких случаях ошибка 500 Internal Server Error может возникать и в других цепочках прокси на других этапах. Чтобы диагностировать и устранить ее, следуйте инструкциям из этого руководства или руководства по внутренней ошибке сервера 500.
    5. Если псевдоним хоста целевого сервера указывает на ваш внутренний сервер, перейдите к разделу Решение.

Разрешение

Если будет установлено, что ошибка 500 возникает на сервере, обратитесь к команде, которая его обслуживает, чтобы устранить проблему.

В примере выше для устранения проблемы может потребоваться, чтобы пользователи передавали действительные учетные данные.

Важная информация

  1. Фактическое сообщение об ошибке, возвращенное внутренним сервером для 500 Internal Server Error, можно посмотреть, только если вы записали сеанс трассировки для запросов, которые не удалось выполнить.
  2. Ответ внутреннего сервера не будет регистрироваться в API Monitoring, журналах доступа NGINX или журналах процессора сообщений по соображениям безопасности.
  3. Вы можете посмотреть журналы внутреннего сервера или включить на нем режим отладки, чтобы получить больше информации об ошибке 500 Internal Server Error и/или посмотреть сообщение об ошибке, возвращенное внутренним сервером.

Необходимо собрать диагностическую информацию

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

Если вы пользователь общедоступного облака, предоставьте следующую информацию:

  • Название организации
  • Название среды
  • Название прокси API
  • Выполните команду curl, чтобы воспроизвести ошибку 500.
  • Файл трассировки, содержащий запросы с 500 Internal Server Error.
  • Если ошибки 500 не возникают в настоящее время, укажите временной период и часовой пояс, когда 500 они происходили в прошлом.

Если вы используете частное облако, предоставьте следующую информацию:

  • Полное сообщение об ошибке, которое появляется при неудачных запросах.
  • Название организации, среды и прокси-сервера API, для которых вы наблюдаете ошибки 500.
  • Пакет прокси-сервера API
  • Файл трассировки, содержащий запросы с 500 Internal Server Error.
  • Журналы доступа 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
  • Период времени с информацией о часовом поясе, когда произошли ошибки 500.