500 내부 서버 오류 - 백엔드 서버

현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동
정보

동영상

동영상 설명
500 내부 서버 오류 - 백엔드로 인해 발생 백엔드 서버로 인해 발생한 실시간 500 Internal Server Error와 오류 해결 단계를 보여줍니다.

증상

클라이언트 애플리케이션은 API 호출에 대한 응답으로 Internal Server Error 메시지와 함께 HTTP 상태 코드 500를 가져옵니다.

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를 반환할 수 있습니다. 이 플레이북에서는 일반적인 단계를 통해 문제를 해결하고 원인에 상관없이 오류를 해결하는 방법을 설명합니다.

이 문제의 가능한 원인은 다음과 같습니다.

원인 설명 다음에 관한 문제 해결 안내
백엔드 서버 오류 백엔드 서버가 어떤 이유로 실패할 수 있습니다. 에지 프라이빗 및 퍼블릭 클라우드 사용자

일반적인 진단 단계

다음 도구/기술 중 하나를 사용하여 이 오류를 진단하세요.

API 모니터링

절차 #1: API 모니터링 사용

API 모니터링을 사용하여 오류를 진단하려면 다음 안내를 따르세요.

  1. 적절한 역할이 있는 사용자로 Apigee Edge UI에 로그인합니다.
  2. 문제를 조사하려는 조직으로 전환합니다.

  3. 분석 > API 모니터링 > 조사 페이지로 이동합니다.
  4. 오류를 관찰한 특정 기간을 선택합니다.
  5. 시간을 기준으로 결함 코드를 표시합니다.

  6. 아래와 같이 오류 코드가 messaging.adaptors.http.flow.ErrorResponseCode인 셀을 선택합니다.

    ( 더 큰 이미지 보기)

  7. 오류 코드 messaging.adaptors.http.flow.ErrorResponseCode에 관한 정보가 아래와 같이 표시됩니다.

    ( 더 큰 이미지 보기)

  8. 로그 보기 를 클릭하고 실패한 요청이 있는 행을 펼칩니다.

    ( 더 큰 이미지 보기)

  9. 로그 창에서 다음 세부정보를 확인합니다.
    • 요청 메시지 ID
    • 상태 코드: 500
    • 결함 소스: target
    • 오류 코드: messaging.adaptors.http.flow.ErrorResponseCode

Trace

절차 #2: Trace 도구 사용

Trace 도구를 사용하여 오류를 진단하려면 다음 단계를 따르세요.

  1. 트레이스 세션을 사용 설정하고 다음 중 하나를 사용 설정합니다.
    • 오류 코드 messaging.adaptors.http.flow.ErrorResponseCode와 함께 500 Internal Server Error 오류가 발생할 때까지 기다립니다.
    • 문제를 재현할 수 있는 경우 API를 호출하여 문제를 재현합니다. 500 Internal Server Error
  2. Show all FlowInfos(모든 FlowInfos 표시)가 사용 설정되어 있는지 확인합니다.

  3. 실패한 요청 중 하나를 선택하고 트레이스를 검사합니다.
  4. trace의 여러 단계를 살펴보고 실패가 발생한 위치를 찾습니다.
  5. 일반적으로 다음과 같이 응답이 대상 서버에서 수신됨 단계 후 흐름에서 오류를 찾을 수 있습니다.

    ( 더 큰 이미지 보기)

  6. 추적에서 AX (애널리틱스 데이터 기록됨) 단계로 이동하여 클릭합니다.
  7. 단계 세부정보 응답 헤더 섹션까지 아래로 스크롤하고 아래와 같이 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. Private Cloud 사용자는 NGINX 액세스 로그를 사용하여 HTTP 500 Internal Server Error에 대한 키 정보를 확인할 수 있습니다.
  2. NGINX 액세스 로그를 확인합니다.

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

  3. 특정 기간(과거에 문제가 발생한 경우) 동안 오류 코드가 messaging.adaptors.http.flow.ErrorResponseCode500 오류가 있는지 아니면 여전히 500와 함께 실패하는 요청이 있는지 검색합니다.
  4. X-Apigee-fault-code 값과 일치하는 X-Apigee-fault-code 가 포함된 500 오류가 있으면 X-Apigee-fault-code 의 값을 확인합니다.

    NGINX 액세스 로그의 샘플 500 오류:

    ( 더 큰 이미지 보기)

    NGINX 액세스 로그의 위 샘플 항목에는 X-Apigee-fault-code X-Apigee-fault-code 에 대한 값이 다음과 같습니다.

    헤더
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
    X-Apigee-fault-source target

원인: 백엔드 서버 오류

진단

백엔드 서버에서 응답한 500 Internal Server Error에는 여러 가지 이유가 있을 수 있습니다. 각 상황을 개별적으로 진단해야 합니다.

  1. 일반적인 진단 단계에 설명된 대로 API Monitoring, Trace 도구 또는 NGINX 액세스 로그를 사용하여 관찰된 오류의 오류 코드, 오류 소스를 확인합니다.
  2. 오류 소스target이고 오류 코드messaging.adaptors.http.flow.ErrorResponseCode이면 백엔드 서버에서 오류를 반환했음을 나타냅니다.
  3. 다음 단계 중 하나를 사용하여 문제의 원인을 진단할 수 있습니다.

    Trace

    Trace 사용:

    실패에 대한 추적 세션이 있으면 다음 단계를 수행합니다.

    1. Trace에서 500 Internal Server Error로 실패한 API 요청을 선택합니다.
    2. 아래 그림과 같이 실패한 API 요청에서 Response received from target server(대상 서버에서 받은 응답) 단계를 선택합니다.

      ( 더 큰 이미지 보기)

    3. 단계 세부정보 섹션까지 아래로 스크롤하고 백엔드 서버의 응답이 포함된 응답 콘텐츠를 확인합니다.

      샘플 응답 콘텐츠:

      <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>
      

      위의 응답에서 백엔드 서버의 오류 메시지는 Not Authorged. 이는 사용자가 잘못된 사용자 인증 정보를 전달했을 수 있으므로 이 오류가 발생함을 나타냅니다.

    백엔드 서버 호출

    백엔드 서버 직접 호출

    백엔드 서버를 직접 호출하여 다음을 수행할 수 있습니다.

    • Apigee Edge를 통해 요청했을 때 받은 것과 동일한 500 Internal Server Error 응답이 수신되는지 확인합니다.
    • 백엔드 서버에서 수신된 오류 메시지 (응답) 확인

    백엔드 서버를 직접 호출하려면 다음 단계를 따르세요.

    1. 요청의 일부로 백엔드 서버에 전달해야 하는 모든 필수 헤더, 쿼리 매개변수, 사용자 인증 정보가 있는지 확인합니다.
    2. 백엔드 서비스에 공개적으로 액세스할 수 있으면 curl 명령어, Postman 또는 기타 REST 클라이언트를 사용하여 백엔드 서버 API를 직접 호출할 수 있습니다.
    3. 메시지 프로세서에서만 백엔드 서버에 액세스할 수 있다면 curl 명령어, Postman 또는 기타 REST 클라이언트를 사용하여 메시지 프로세서에서 직접 백엔드 서버 API를 호출할 수 있습니다.

    4. 백엔드 서비스가 실제로 500 Internal Server Error를 반환하는지 확인하고 백엔드 서버에서 반환한 오류 메시지 (응답)를 확인하여 이 오류의 원인을 판단합니다.

    백엔드 서버 로그

    백엔드 서버 로그 사용

    1. 백엔드 서버 로그를 검토하고 오류와 그 원인에 대한 세부정보를 확인합니다.
    2. 가능하면 백엔드 서버에서 디버그 모드를 사용 설정하여 오류와 원인에 대한 자세한 내용을 확인하세요.
  4. 실패한 API 프록시의 특정 대상 엔드포인트에서 프록시 체인을 사용 중인지 확인합니다. 즉, 대상 서버/대상 엔드포인트가 Apigee Edge에 있는 다른 프록시를 호출하는지 확인합니다. 이를 확인하는 방법은 다음과 같습니다.

    1. 실패한 요청에 대한 트레이스가 있으면 Request sent to target server 단계로 이동하여 Show Curl을 클릭합니다.

    2. 대상 서버 호스트 별칭을 확인할 수 있는 대상 서버에 전송된 요청에 대한 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 지원팀에 문의하세요.

Public Cloud 사용자인 경우 다음 정보를 제공합니다.

  • 조직 이름
  • 환경 이름
  • API 프록시 이름
  • curl 명령어를 완료하여 500 오류를 재현합니다.
  • 500 Internal Server Error를 사용한 요청이 포함된 추적 파일
  • 현재 500 오류가 발생하지 않는 경우 이전에 500 오류가 발생했을 때의 시간대 정보를 제공합니다.

Private Cloud 사용자인 경우 다음 정보를 제공하세요.

  • 실패한 요청에 대해 발견된 전체 오류 메시지
  • 500 오류가 관찰되는 조직, 환경 이름, API 프록시 이름
  • 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 오류가 발생한 시간대 정보가 포함된 기간입니다.