Симптом
Клиентское приложение получает код состояния HTTP 500
вместе с сообщением Internal Server Error
в качестве ответа на вызовы API.
Код состояния HTTP 500
— это общий ответ об ошибке. Это означает, что сервер столкнулся с непредвиденной ситуацией, которая не позволила ему выполнить запрос. Эта ошибка обычно возвращается сервером, когда никакой другой код ошибки не подходит.
Сообщения об ошибках
Клиентское приложение получает следующий код ответа:
HTTP/1.1 500 Internal Server Error
Кроме того, вы можете увидеть сообщение об ошибке, подобное показанному ниже:
Пример ответа внутреннего сервера №1
{"errorMessage":"Sorry either your e-mail or password didn't match.", "errorParameters":"{}", "errorCode":"500", "errorKey":"INVALID_EMAILPASSWORD"}
Примечание. Приведенный выше код ответа и сообщение об ошибке являются лишь примерами представлений, которые могут быть возвращены внутренним сервером. В некоторых случаях вы можете получить только код ответа без сообщения об ошибке. Формат и содержимое кода ответа и сообщения об ошибке могут различаться в зависимости от реализации внутреннего сервера.
Возможные причины
Может 500 Internal Server Error
быть возвращен внутренним сервером по ряду причин. В этом пособии объясняется, как устранять неполадки с помощью стандартных шагов и устранять эту ошибку независимо от ее причины.
Возможные причины этой проблемы следующие:
Общие этапы диагностики
Используйте один из следующих инструментов/методов для диагностики этой ошибки:
Процедура № 1: Использование API-мониторинга
Примечание . Инструкции в этом разделе применимы только к пользователям общедоступного облака.
Чтобы диагностировать ошибку с помощью мониторинга API:
- Войдите в пользовательский интерфейс Apigee Edge как пользователь с соответствующей ролью .
- Переключитесь на организацию, в которой вы хотите исследовать проблему.
- Перейдите на страницу « Анализ» > «Мониторинг API» > «Исследовать ».
- Выберите конкретный период времени, в котором вы наблюдали ошибки.
- Постройте график кода неисправности в зависимости от времени .
Примечание. Вы также можете построить график зависимости кода состояния от времени .
- Выберите ячейку с кодом неисправности
messaging.adaptors.http.flow.ErrorResponseCode
, как показано ниже: - Информация о коде неисправности
messaging.adaptors.http.flow.ErrorResponseCode
отображается, как показано ниже: - Щелкните Просмотреть журналы и разверните строку неудачного запроса.
( просмотреть увеличенное изображение )
- В окне « Журналы » обратите внимание на следующие сведения:
- Идентификатор сообщения запроса
- Код состояния:
500
- Источник неисправности:
target
- Код неисправности:
messaging.adaptors.http.flow.ErrorResponseCode
Причина: ошибка внутреннего сервера.
Диагноз
Ответ 500 Internal Server Error
внутреннего сервера может быть вызван рядом причин. Вам нужно будет диагностировать каждую ситуацию самостоятельно.
- Определите код ошибки, источник ошибки для ошибки, обнаруженной с помощью мониторинга API, инструмента трассировки или журналов доступа NGINX, как описано в разделе Общие этапы диагностики .
- Если Источник ошибки
target
и Код ошибки ,messaging.adaptors.http.flow.ErrorResponseCode
это означает, что ошибка возвращена внутренним сервером. - Вы можете использовать один из следующих шагов для диагностики причины проблемы:
Использование трассировки:
Если у вас есть сеанс трассировки сбоя, выполните следующие действия:
- В трассировке выберите неудавшийся запрос API с
500 Internal Server Error
. - Выберите ответ, полученный от фазы целевого сервера, из неудачного запроса API, как показано на рисунке ниже:
( просмотреть увеличенное изображение )
- Прокрутите вниз до раздела « Сведения о фазе » и проверьте содержимое ответа, которое содержит ответ от внутреннего сервера.
Пример содержания ответа:
<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
ответа. В таких случаях вам необходимо работать с командой вашего внутреннего сервера для дальнейшего изучения этой проблемы.
- В трассировке выберите неудавшийся запрос API с
- Проверьте, не используете ли вы цепочку прокси -серверов в конкретной целевой конечной точке неисправного прокси-сервера API; то есть, если целевой сервер/целевая конечная точка вызывает другой прокси в Apigee Edge. Чтобы определить это:
- Если у вас есть трассировка неудачного запроса, перейдите к фазе « Запрос, отправленный на целевой сервер » и нажмите « Показать Curl» .
- Откроется окно Curl for Request Sent to Target Server , из которого можно определить псевдоним хоста целевого сервера.
- Просмотрите целевую конечную точку вашего API-прокси и проверьте, указывает ли URL-адрес внутреннего сервера или имя хоста на целевом сервере на другой прокси или ваш собственный внутренний сервер.
- Если псевдоним хоста целевого сервера указывает на псевдоним виртуального хоста, то это цепочка прокси. В этом случае вам нужно повторить все вышеперечисленные шаги для связанного прокси-сервера, пока вы не определите, что на самом деле вызывает ошибку
500 Internal Server Error
. В этих случаях500 Internal Server Error
могут возникать и другие связанные прокси-серверы на других этапах, которые можно диагностировать и устранить с помощью инструкций, приведенных в этом руководстве или в руководстве 500 Internal Server Error . - Если псевдоним хоста целевого сервера указывает на ваш внутренний сервер, перейдите к разделу « Решение » .
- Если у вас есть трассировка неудачного запроса, перейдите к фазе « Запрос, отправленный на целевой сервер » и нажмите « Показать Curl» .
Разрешение
Если установлено, что 500
ошибка исходит от внутреннего сервера, поработайте с командой вашего внутреннего сервера, чтобы устранить проблему надлежащим образом.
В приведенном выше примере вам может потребоваться запросить у пользователей действительные учетные данные, чтобы решить эту проблему.
Ключевые моменты, на которые следует обратить внимание
- Фактическое сообщение об ошибке, возвращенное внутренним сервером для
500 Internal Server Error
, можно просмотреть, только если вы захватили сеанс трассировки для неудачных запросов. - Ответ внутреннего сервера не будет регистрироваться в мониторинге API, журналах доступа NGINX или журналах процессора сообщений по соображениям безопасности.
- Вы можете просмотреть журналы внутреннего сервера или включить режим отладки на внутреннем сервере, чтобы получить дополнительные сведения об
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
произошли ошибки.