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-LengthContent-EncodingTransfer-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 콘텐츠 재설정 |
| 응답 본문 | 오류 | 오류 |
(0이 아닌 값으로 설정) |
오류 | 오류 |
|
오류 | 오류 없음 |
Transfer-Encoding |
오류 | 오류 |
이 오류의 가능한 원인은 다음과 같습니다.
| 원인 | 설명 | 다음에 관한 문제 해결 안내 |
|---|---|---|
| 백엔드 서버의 204 응답이 있는 응답 본문 또는 헤더 | 백엔드 서버는 204 No Content 또는 205 Reset Content
응답 본문 또는 하나 이상의 헤더(Content-Type,
Content-Encoding 또는 Transfer-Encoding)가 포함된 응답을 전송합니다. |
Edge Public 및 Private Cloud 사용자 |
일반적인 진단 단계
다음 도구/기법 중 하나를 사용하여 이 오류를 진단합니다.
API 모니터링
API 모니터링을 사용하여 오류를 진단하려면 다음 단계를 따르세요.
- 적절한 역할이 있는 사용자로 Apigee Edge UI에 로그인합니다..
문제를 조사하려는 조직으로 전환합니다.
- 분석 > API 모니터링 > 조사 페이지로 이동합니다.
- 오류가 관찰된 특정 기간을 선택합니다.
- 오류 코드 를 시간 에 대해 표시합니다.
아래와 같이 오류 코드
protocol.http.ResponseWithBody가 있는 셀을 선택합니다.( 큰 이미지 보기)
아래와 같이 오류 코드
protocol.http.ResponseWithBody에 관한 정보가 표시됩니다.( 큰 이미지 보기)
로그 보기 를 클릭하고 실패한 요청의 행을 펼칩니다.
( 큰 이미지 보기)
- 로그 창에서 다음 세부정보를 확인합니다.
- 상태 코드:
502 - 오류 소스:
target - 오류 코드:
protocol.http.ResponseWithBody.
- 상태 코드:
- 오류 소스 의 값이
target이고 오류 코드 의 값이protocol.http.ResponseWithBody이면 백엔드 서버가 응답 본문 또는 가능한 원인 섹션에 언급된 헤더 중 하나와 함께204 No Content또는205 Reset Content상태 코드를 전송했기 때문에 오류가 발생했음을 나타냅니다.
Trace 도구
Trace 도구를 사용하여 오류를 진단하려면 다음 단계를 따르세요.
- trace 세션을 사용 설정하고 다음 중 하나를 수행합니다.
502 Bad Gateway오류가 발생할 때까지 기다립니다. 또는- 문제를 재현할 수 있는 경우 API를 호출하고
502 Bad Gateway오류를 재현합니다.
모든 FlowInfo 표시 가 사용 설정되어 있는지 확인합니다.
- 실패한 요청 중 하나를 선택하고 trace를 검토합니다.
- trace의 여러 단계를 탐색하고 실패가 발생한 위치를 찾습니다.
일반적으로 아래와 같이 대상 서버에 전송된 요청 단계 바로 뒤에 있는
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
- 오류:
- trace에서 AX (기록된 분석 데이터) 단계로 이동하여 클릭합니다.
아래와 같이 단계 세부정보, 오류 헤더 섹션으로 스크롤하고 X-Apigee-fault-code 및 X-Apigee-fault-source 의 값을 확인합니다.
( 큰 이미지 보기)
- X-Apigee-fault-code 및 X-Apigee-fault-source
의 값은 각각
are protocol.http.ResponseWithBody및target입니다. 이는 백엔드 서버가 응답 본문 또는 가능한 원인에 언급된 헤더 중 하나와 함께204 No Content또는205 Reset Content상태 코드를 전송했기 때문에 오류가 발생했음을 나타냅니다.오류 값 X-Apigee-fault-code protocol.http.ResponseWithBodyX-Apigee-fault-source target
NGINX
NGINX 액세스 로그를 사용하여 오류를 진단하려면 다음 단계를 따르세요.
- Private Cloud 사용자인 경우 NGINX 액세스 로그를 사용하여 HTTP
502 Bad Gateway에 관한 주요 정보를 확인할 수 있습니다. NGINX 액세스 로그를 확인합니다.
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log위치: ORG, ENV, PORT#는 실제 값으로 대체됩니다.
- 특정 기간(문제가 과거에 발생한 경우) 동안 오류 코드
protocol.http.ResponseWithBody가 있는502오류가 있는지 또는502로 인해 여전히 실패하는 요청이 있는지 검색합니다. X-Apigee-fault-code 가
protocol.http.ResponseWithBody의 값과 일치하는502오류를 발견한 경우 X-Apigee-fault-source 의 값을 확인합니다.NGINX 액세스 로그의 샘플 502 오류:
NGINX 액세스 로그의 위 샘플 항목에는 X- Apigee-fault-code 및 X-Apigee-fault-source에 관한 다음 값이 있습니다.
응답 헤더 값 X-Apigee-fault-code protocol.http.ResponseWithBodyX-Apigee-fault-source target- X-Apigee-fault-code 및 X-Apigee-fault-source
의 값은 각각
protocol.http.ResponseWithBody및target입니다. 이는 백엔드 서버가 응답 본문 또는 가능한 원인에 언급된 헤더 중 하나와 함께204 No Content또는205 Reset Content상태 코드를 전송했기 때문에 오류가 발생했음을 나타냅니다.
원인: 백엔드 서버의 204 응답이 있는 응답 본문 또는 헤더
진단
- 일반적인 진단 단계에 설명된 대로 API 모니터링, Trace 도구 또는 NGINX 액세스 로그를 사용하여 관찰된 오류의 오류 코드 및 오류 소스를 확인합니다.
- 오류 코드가
protocol.http.ResponseWithBody이고 오류 소스의 값이target이면 백엔드 서버가 응답 본문 또는 가능한 원인에 언급된 헤더 중 하나와 함께204 No Content또는205 Reset Content상태 코드로 응답했음을 나타냅니다. 백엔드 서버가 실제로 응답 페이로드 본문 또는 가능한 원인에 언급된 헤더 중 하나 이상을 전송했는지 확인하려면 다음 단계를 수행하면 됩니다.
Public Cloud 사용자 이고 시스템에서 백엔드 서버로 직접 동일한 API 요청을 할 수 있는 경우
- Private Cloud 사용자인 경우 실패가 관찰되는 특정 조직 및 환경과 연결된 메시지 프로세서 중 하나에서 백엔드 서버로 직접 동일한 API 요청을 할 수 있습니다.
백엔드 서버에서 수신한 응답을 검토하고 응답 페이로드 본문 또는 위에 언급된 헤더 중 하나 이상이 포함되어 있는지 확인합니다. 그렇다면 이는 오류의 원인이 됩니다.
샘플 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상태 코드로 응답했습니다.- 위의 모든 예에서 백엔드 서버는 응답 본문 또는 가능한 원인에 언급된 헤더 중 하나와 함께
204 No Content또는205 Reset Content상태 코드를 전송했습니다. - 따라서 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 응답의 일부로
- 응답 페이로드 본문
- 다음 헤더 중 하나:
Content-LengthContent-EncodingTransfer-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 Content
및 205 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