502 잘못된 게이트웨이 - ResponseWithBody

Apigee Edge 문서입니다.
Go to the Apigee X 문서로 이동합니다.
info

증상

클라이언트 애플리케이션에 API 호출의 응답으로 오류 코드 protocol.http.ResponseWithBody와 함께 HTTP 상태 코드 502 Bad Gateway가 발생합니다.

오류 메시지

클라이언트 애플리케이션에 다음 응답 코드가 발생합니다.

HTTP/1.1 502 Bad Gateway

또한 다음 오류 메시지 중 하나가 관찰될 수 있습니다.

{
   "fault":{
      "faultstring":"Received 204 Response with message body",
      "detail":{
         "errorcode":"protocol.http.ResponseWithBody"
      }
   }
}
{
   "fault":{
      "faultstring":"Received 205 Response with message body",
      "detail":{
         "errorcode":"protocol.http.ResponseWithBody"
      }
   }
}

가능한 원인

이 오류는 백엔드 서버에서 Apigee Edge로의 HTTP 응답이 204 No Content 또는 205 Reset Content이지만 응답 본문 또는 다음 헤더 중 하나 이상을 포함하는 경우에 발생합니다.

  • Content-Length
  • Content-Encoding
  • Transfer-Encoding

사양 RFC 7231, 섹션 6.3.5: 204 콘텐츠 없음 RFC 7231, 섹션 6.3.6: 205 콘텐츠 재설정에 따라 원본 서버에서 상태 코드 204 No Content 또는 205 Reset Content와 함께 응답 페이로드 본문의 일부로 추가 콘텐츠 를 전송해서는 안 됩니다. `Content-Length`, `Content-Encoding` 또는 `Transfer-Encoding`와 같은 응답 헤더는 응답 페이로드의 크기, 유형 또는 형식을 나타냅니다.

따라서 Apigee Edge는 다음과 같은 상황에서 오류 코드 protocol.http.ResponseWithBody와 함께 502 Bad Gateway 상태 코드를 클라이언트에 반환합니다.

백엔드 서버의 상태 코드
백엔드 서버의 응답에 다음이 포함됩니다. 204 콘텐츠 없음 205 콘텐츠 재설정
응답 본문 오류 오류

Content-Length 헤더

(0이 아닌 값으로 설정)

오류 오류

Content-Encoding

(Apigee Edge에서 지원되는 인코딩으로 설정 )

오류 오류 없음
Transfer-Encoding 오류 오류

이 오류의 가능한 원인은 다음과 같습니다.

원인 설명 다음에 관한 문제 해결 안내
백엔드 서버의 204 응답이 있는 응답 본문 또는 헤더 백엔드 서버는 204 No Content 또는 205 Reset Content 응답 본문 또는 하나 이상의 헤더(Content-Type, Content-Encoding 또는 Transfer-Encoding)가 포함된 응답을 전송합니다. Edge Public 및 Private Cloud 사용자

일반적인 진단 단계

다음 도구/기법 중 하나를 사용하여 이 오류를 진단합니다.

API 모니터링

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

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

  3. 분석 > API 모니터링 > 조사 페이지로 이동합니다.
  4. 오류가 관찰된 특정 기간을 선택합니다.
  5. 오류 코드시간 에 대해 표시합니다.
  6. 아래와 같이 오류 코드 protocol.http.ResponseWithBody가 있는 셀을 선택합니다.

    ( 큰 이미지 보기)

  7. 아래와 같이 오류 코드 protocol.http.ResponseWithBody에 관한 정보가 표시됩니다.

    ( 큰 이미지 보기)

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

    ( 큰 이미지 보기)

  9. 로그 창에서 다음 세부정보를 확인합니다.
    • 상태 코드: 502
    • 오류 소스: target
    • 오류 코드: protocol.http.ResponseWithBody.
  10. 오류 소스 의 값이 target이고 오류 코드 의 값이 protocol.http.ResponseWithBody이면 백엔드 서버가 응답 본문 또는 가능한 원인 섹션에 언급된 헤더 중 하나와 함께 204 No Content 또는 205 Reset Content 상태 코드를 전송했기 때문에 오류가 발생했음을 나타냅니다.

Trace 도구

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

  1. trace 세션을 사용 설정하고 다음 중 하나를 수행합니다.
    1. 502 Bad Gateway 오류가 발생할 때까지 기다립니다. 또는
    2. 문제를 재현할 수 있는 경우 API를 호출하고 502 Bad Gateway 오류를 재현합니다.
  2. 모든 FlowInfo 표시 가 사용 설정되어 있는지 확인합니다.

  3. 실패한 요청 중 하나를 선택하고 trace를 검토합니다.
  4. trace의 여러 단계를 탐색하고 실패가 발생한 위치를 찾습니다.
  5. 일반적으로 아래와 같이 대상 서버에 전송된 요청 단계 바로 뒤에 있는 flowinfo 오류 에서 오류를 찾을 수 있습니다.

    시나리오 #1

    시나리오 #1: 백엔드 서버가 응답 본문 또는 가능한 원인에 나열된 헤더 중 하나가 포함된 상태 코드 204 No Content 로 응답합니다.

    trace에서 다음 값을 확인합니다.

    • 오류: Received 204 Response with message body
    • error.class: com.apigee.rest.framework.BadGateway

    시나리오 #2

    시나리오 #2: 백엔드 서버가 응답 본문 또는 가능한 원인에 나열된 헤더 중 하나가 포함된 상태 코드 204 No Content로 응답합니다.

    trace에서 다음 값을 확인합니다.

    • 오류: Received 205 Response with message body
    • error.class: com.apigee.rest.framework.BadGateway
  6. trace에서 AX (기록된 분석 데이터) 단계로 이동하여 클릭합니다.
  7. 아래와 같이 단계 세부정보, 오류 헤더 섹션으로 스크롤하고 X-Apigee-fault-codeX-Apigee-fault-source 의 값을 확인합니다.

    ( 큰 이미지 보기)

  8. X-Apigee-fault-codeX-Apigee-fault-source 의 값은 각각 are protocol.http.ResponseWithBodytarget입니다. 이는 백엔드 서버가 응답 본문 또는 가능한 원인에 언급된 헤더 중 하나와 함께 204 No Content 또는 205 Reset Content 상태 코드를 전송했기 때문에 오류가 발생했음을 나타냅니다.
    오류
    X-Apigee-fault-code protocol.http.ResponseWithBody
    X-Apigee-fault-source target

NGINX

NGINX 액세스 로그를 사용하여 오류를 진단하려면 다음 단계를 따르세요.

  1. Private Cloud 사용자인 경우 NGINX 액세스 로그를 사용하여 HTTP 502 Bad Gateway에 관한 주요 정보를 확인할 수 있습니다.
  2. NGINX 액세스 로그를 확인합니다.

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

    위치: ORG, ENV, PORT#는 실제 값으로 대체됩니다.

  3. 특정 기간(문제가 과거에 발생한 경우) 동안 오류 코드 protocol.http.ResponseWithBody가 있는 502 오류가 있는지 또는 502로 인해 여전히 실패하는 요청이 있는지 검색합니다.
  4. X-Apigee-fault-codeprotocol.http.ResponseWithBody 의 값과 일치하는 502 오류를 발견한 경우 X-Apigee-fault-source 의 값을 확인합니다.

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

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

    응답 헤더
    X-Apigee-fault-code protocol.http.ResponseWithBody
    X-Apigee-fault-source target
  5. X-Apigee-fault-codeX-Apigee-fault-source 의 값은 각각 protocol.http.ResponseWithBodytarget입니다. 이는 백엔드 서버가 응답 본문 또는 가능한 원인에 언급된 헤더 중 하나와 함께 204 No Content 또는 205 Reset Content 상태 코드를 전송했기 때문에 오류가 발생했음을 나타냅니다.

원인: 백엔드 서버의 204 응답이 있는 응답 본문 또는 헤더

진단

  1. 일반적인 진단 단계에 설명된 대로 API 모니터링, Trace 도구 또는 NGINX 액세스 로그를 사용하여 관찰된 오류의 오류 코드오류 소스를 확인합니다.
  2. 오류 코드protocol.http.ResponseWithBody이고 오류 소스의 값이 target이면 백엔드 서버가 응답 본문 또는 가능한 원인에 언급된 헤더 중 하나와 함께 204 No Content 또는 205 Reset Content 상태 코드로 응답했음을 나타냅니다.
  3. 백엔드 서버가 실제로 응답 페이로드 본문 또는 가능한 원인에 언급된 헤더 중 하나 이상을 전송했는지 확인하려면 다음 단계를 수행하면 됩니다.

    1. Public Cloud 사용자 이고 시스템에서 백엔드 서버로 직접 동일한 API 요청을 할 수 있는 경우

    2. Private Cloud 사용자인 경우 실패가 관찰되는 특정 조직 및 환경과 연결된 메시지 프로세서 중 하나에서 백엔드 서버로 직접 동일한 API 요청을 할 수 있습니다.
    3. 백엔드 서버에서 수신한 응답을 검토하고 응답 페이로드 본문 또는 위에 언급된 헤더 중 하나 이상이 포함되어 있는지 확인합니다. 그렇다면 이는 오류의 원인이 됩니다.

      샘플 1

      샘플 1: Content-Encoding 헤더가 있는 백엔드 서버 응답 204

      curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
      

      …
      < HTTP/1.1 204 No Content
      < Content-Encoding: gzip
      < Date: Tue, 31 Jul 2021 21:41:13 GMT
      < Connection: keep-alive
      

      이 샘플에서 백엔드 서버는 204 No Content 상태 코드와 Content-Encoding: gzip 으로 응답했습니다.

      샘플 2

      샘플 2: Content-Length 헤더가 있는 백엔드 서버 응답 204

      curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
      

      …
      < HTTP/1.1 204 No Content
      < Content-Length: 48
      < Date: Tue, 31 Jul 2021 21:41:13 GMT
      < Connection: keep-alive
      

      이 샘플에서 백엔드 서버는 204 No Content 상태 코드와 Content-Length: 48 으로 응답했습니다.

      샘플 3

      샘플 3: 응답 본문이 있는 백엔드 서버 응답 205

      curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
      

      …
      < HTTP/1.1 205 Reset Content
      < Date: Sat, 31 Jul 2021 17:14:09 GMT
      < Content-Length: 12
      < Content-Type: text/plain; charset=utf-8
      <
      * Connection #0 to host X.X.X.X left intact
      This is a sample Response
      

      이 샘플에서 백엔드 서버는 응답 본문 This is a sample Response.와 함께 205 Reset Content 상태 코드로 응답했습니다.

    4. 위의 모든 예에서 백엔드 서버는 응답 본문 또는 가능한 원인에 언급된 헤더 중 하나와 함께 204 No Content 또는 205 Reset Content 상태 코드를 전송했습니다.
    5. 따라서 Apigee Edge는 502 Bad Gateway 상태 코드를 오류 코드 protocol.http.ResponseWithBody와 함께 전송했습니다.

해상도

백엔드 서버가 Apigee Edge에 204 No Content 또는 205 Reset Content 응답을 전송할 때 항상 사양 RFC 7231, 섹션 6.3.6: 205 콘텐츠 재설정을 준수하는지 확인합니다. 즉, 백엔드 서버는 전송해서는 안 됩니다. 다음은 204 No Content 또는 205 Reset Content 응답의 일부로

  1. 응답 페이로드 본문
  2. 다음 헤더 중 하나:
    1. Content-Length
    2. Content-Encoding
    3. Transfer-Encoding

사양

백엔드 서버가 204 No Content 또는 205 Reset Content 응답을 전송하지만 다음 RFC 사양을 준수하지 않는 경우 Apigee Edge는 502 Bad Gateway 상태 코드와 오류 코드 protocol.http.ResponseWithBody로 응답합니다.

사양
RFC 7231, 섹션 6.3.5: 204 콘텐츠 없음
RFC 7231, 섹션 6.3.6: 205 콘텐츠 재설정

핵심 사항

권장되는 해결 방법은 백엔드 서버를 수정하여 204 No Content205 Reset Content 상태 코드를 응답 본문과 헤더(Content-Length, Content-Encoding, Transfer-Encoding) 없이 전송하고 사양 RFC 7231, 섹션 6.3.5: 204 콘텐츠 없음 RFC 7231, 섹션 6.3.6: 205 콘텐츠 재설정을 준수하는 것입니다.

Apigee 지원팀의 지원이 여전히 필요한 경우 진단 정보 수집 필요로 이동하세요.

진단 정보 수집 필요

다음 진단 정보를 수집한 후 Apigee Edge 지원팀에 문의합니다.

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

  • 조직 이름
  • 환경 이름
  • API 프록시 이름
  • 502 오류를 재현하는 데 사용된 전체 curl 명령어
  • API 요청의 trace 파일

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

  • 실패한 요청에 관찰된 전체 오류 메시지
  • 환경 이름
  • API 프록시 번들
  • API 요청의 trace 파일
  • 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