<ph type="x-smartling-placeholder"></ph>
현재 Apigee Edge 문서를 보고 있습니다.
Apigee X 문서. 정보
증상
클라이언트 애플리케이션이 오류 코드와 함께 HTTP 상태 코드 502 Bad Gateway
를 가져옵니다.
protocol.http.TooBigBody
를 API 호출에 대한 응답으로 사용합니다.
오류 메시지
클라이언트 애플리케이션은 다음과 같은 응답 코드를 받습니다.
HTTP/1.1 502 Bad Gateway
또한 다음과 같은 오류 메시지가 표시될 수 있습니다.
{ "fault":{ "faultstring":"Body buffer overflow", "detail":{ "errorcode":"protocol.http.TooBigBody" } } }
가능한 원인
이 오류는 대상/백엔드 서버에서 Apigee Edge로 전송한 페이로드 크기가 부분적으로 HTTP 응답이 Apigee Edge에서 허용되는 한도보다 큽니다.
이 오류의 가능한 원인은 다음과 같습니다.
원인 | 설명 | 다음에 관한 문제 해결 안내 |
---|---|---|
응답 페이로드 크기가 허용된 한도보다 큽니다. | Apigee에 대한 HTTP 응답의 일부로 대상/백엔드 서버에서 전송한 페이로드 크기는 Apigee에서 허용되는 한도를 초과합니다. | 에지 퍼블릭 및 프라이빗 클라우드 사용자 |
다음 기간 이후 응답 페이로드 크기가 허용된 한도를 초과함 압축 해제 | HTTP의 일부로 대상/백엔드 서버에서 압축된 형식으로 전송한 페이로드 크기 Apigee에 대한 응답이 Apigee에서 압축 해제할 때 허용되는 한도를 초과합니다. | 에지 퍼블릭 및 프라이빗 클라우드 사용자 |
일반적인 진단 단계
다음 도구/기술 중 하나를 사용하여 이 오류를 진단합니다.
API 모니터링
<ph type="x-smartling-placeholder">API 모니터링을 사용하여 오류를 진단하려면 다음 안내를 따르세요.
- <ph type="x-smartling-placeholder"></ph> 다음 계정으로 Apigee Edge UI에 로그인: 역할을 수행하는 것이 좋습니다.
문제를 조사하려는 조직으로 전환합니다.
- 분석 > API 모니터링 > 조사 페이지를 엽니다.
- 오류가 관찰된 특정 기간을 선택합니다.
- 프록시 필터를 선택하여 오류 코드의 범위를 좁힐 수 있습니다.
- 시간을 기준으로 결함 코드를 표시합니다.
오류 코드가
protocol.http.TooBigBody
인 셀을 선택하세요. 다음과 같습니다.오류 코드에 대한 정보가 표시됩니다.
protocol.http.TooBigBody
는 다음과 같습니다.로그 보기를 클릭하고 실패한 요청의 행을 펼칩니다.
- 로그 창에서 다음 세부정보를 확인합니다.
<ph type="x-smartling-placeholder">
- </ph>
- 상태 코드:
502
- 오류 소스:
target
- 오류 코드:
protocol.http.TooBigBody
.
- 상태 코드:
- 결함 소스의 값이
target
이고 결함 코드가 있는 경우 값이protocol.http.TooBigBody
이면 응답의 페이로드 크기가 Apigee Edge에서 허용되는 한도입니다.
Trace
<ph type="x-smartling-placeholder">Trace 도구를 사용하여 오류를 진단하는 방법은 다음과 같습니다.
- 추적 세션을 사용 설정하고 다음 중 하나를 수행합니다.
<ph type="x-smartling-placeholder">
- </ph>
502 Bad Gateway
오류가 발생할 때까지 기다립니다.- 문제를 재현할 수 있다면 API를 호출하고 재현합니다.
오류
502 Bad Gateway
개
- 실패한 요청 중 하나를 선택하고 trace를 검토합니다.
- 추적의 여러 단계를 살펴보고 오류가 발생한 위치를 찾습니다.
대상에서 응답을 수신한 직후 오류 단계로 이동합니다. 서버 단계를 실행합니다.
트레이스에서 오류 값을 확인합니다.
- 오류:
Body buffer overflow
- error.class:
com.apigee.errors.http.server.BadGateway
이는 Apigee Edge (메시지 프로세서 구성요소)가 실행되자마자 백엔드 서버에서 응답을 수신하는데, 페이로드 크기가 허용된 있습니다.
- 오류:
아래와 같이 Response Sent to Client 단계에서 실패가 표시됩니다.
- 트레이스에서 오류 값을 확인합니다. 위의 샘플 trace는 다음을 보여줍니다.
<ph type="x-smartling-placeholder">
- </ph>
- 오류:
502 Bad Gateway
- 오류 콘텐츠:
<ph type="x-smartling-placeholder">
{"fault":{"faultstring":"Body buffer overflow","detail":{"errorcode":"protocol.http.TooBigBody"}}}
</ph>
- 오류:
여러 시나리오에 대해 아래에 나와 있는 것처럼 Response Received from target server(대상 서버에서 응답 수신) 단계로 이동합니다.
비압축
시나리오 #1: 비압축 형식으로 전송된 응답 페이로드
트레이스에서 오류 값을 확인합니다.
- 대상 서버에서 응답 수신:
200 OK
- Content-Length (응답 헤더 섹션): 최대 11MB
압축
시나리오 #2: 압축된 형식으로 전송된 요청 페이로드
트레이스에서 오류 값을 확인합니다.
- 대상 서버에서 응답 수신:
200 OK
- Content-Encoding: 응답 헤더에 이 헤더가 표시되는 경우
섹션에서 값을 기록합니다. 예를 들어, 이 예에서 값은
gzip
- 대상 서버에서 응답 수신:
Response Content 섹션의 Body를 확인합니다.
{"fault":{"faultstring":"Body buffer overflow","detail":{"errorcode":"protocol.http.TooBigBody"}}}
<ph type="x-smartling-placeholder">트레이스의 AX (애널리틱스 데이터 기록됨) 단계로 이동하여 클릭합니다. 관련 세부정보를 볼 수 있습니다.
- 단계 세부정보에서 아래로 스크롤하여 변수 읽기 섹션으로 이동한 후
다음을 나타내는
target.received.content.length
값: <ph type="x-smartling-placeholder">- </ph>
- 비압축 형식으로 전송될 때 응답 페이로드의 실제 크기
- 페이로드가 다음과 같은 경우 Apigee가 압축 해제할 때 응답 페이로드의 크기입니다. 압축된 형식으로 전송됩니다 허용되는 한도 (10MB)로 제한됩니다.
비압축
시나리오 #1: 비압축 형식으로 전송된 응답 페이로드
target.received.content.length 값을 확인하세요.
요청 헤더 값 target.received.content.length ~11MB 압축
시나리오 #2: 압축된 형식으로 전송된 요청 페이로드
target.received.content.length 값을 확인하세요.
요청 헤더 값 target.received.content.length 약 10MB 다음 표에서는 다음 위치에서 Apigee가
502
오류를 반환하는 이유를 설명합니다. target.received.content.length 값에 기반한 두 가지 시나리오가 있습니다.시나리오 target.received.content.length 값 실패 이유 압축되지 않은 형식의 응답 페이로드 ~11MB 크기 > 허용되는 한도: 10MB 압축된 형식의 응답 페이로드 약 10MB 압축 해제 시 크기 제한을 초과했습니다.
<ph type="x-smartling-placeholder">
NGINX
<ph type="x-smartling-placeholder">NGINX 액세스 로그를 사용하여 오류를 진단하려면 다음 안내를 따르세요.
- Private Cloud 사용자인 경우 NGINX 액세스 로그를 사용하여
HTTP
502
오류에 대한 주요 정보입니다. NGINX 액세스 로그를 확인합니다.
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
위치: ORG, ENV, PORT#는 실제 값으로 대체됩니다.
- 특정 기간 동안 오류
502
개가 있었는지 찾기 위해( 이전에 발생한 적이 있는지) 또는 여전히502
- 일치하는 X-Apigee-fault-code 에
502
오류가 있는 경우protocol.http.TooBigBody
의 값을 구한 다음 X-Apigee-fault-source.NGINX 액세스 로그의 샘플 502 오류:
NGINX 액세스 로그의 위 샘플 항목에는 X-Apigee- fault-code 및 X-Apigee-fault-source:
응답 헤더 값 X-Apigee-fault-code protocol.http.TooBigBody
X-Apigee-fault-source target
원인: 응답 페이로드 크기가 허용된 한도를 초과합니다.
진단
- 다음에 대한 오류 코드, 오류 소스, 응답 페이로드 크기를 결정합니다. API 모니터링, Trace 도구 또는 NGINX 액세스 로그를 사용하여 시나리오 #1의 일반적인 진단 단계
- 결함 소스의 값이
target
이면 응답이 대상/백엔드 서버에서 Apigee로 전송한 페이로드 크기가 Apigee Edge에서 허용되는 한도입니다. - 1단계에서 결정한 응답 페이로드 크기를 확인합니다.
- 페이로드 크기가 허용되는 한도가 10MB인 경우 오류의 원인이 됩니다.
- 허용된 페이로드 크기가 최대 10MB인 경우 응답이 압축된 형식으로 전달됩니다 <ph type="x-smartling-placeholder"></ph>(으)로 이동 원인: 압축 해제 후 응답 페이로드 크기가 허용 한도를 초과합니다.
- 응답 페이로드 크기가 실제로 >인지 확인 10MB 허용 한도
다음 단계에 따라 실제 응답을 생성합니다.
<ph type="x-smartling-placeholder">
- </ph>
- 대상/백엔드 서버에 대한 실제 요청에 액세스할 수 없는 경우 문제 해결로 이동합니다.
- 대상/백엔드 서버에 대한 실제 요청에 액세스할 수 있는 경우
다음 단계를 따르세요.
<ph type="x-smartling-placeholder">
- </ph>
- 퍼블릭 클라우드/프라이빗 클라우드 사용자인 경우 백엔드 서버 자체의 백엔드 서버 또는 백엔드 서버에 요청할 수 있게 됩니다.
- Private Cloud 사용자인 경우 메시지 프로세서 중 하나에서 백엔드 서버로 전송합니다.
- 다음을 확인하여 응답에 전달된 페이로드의 크기를 확인합니다. Content-Length 헤더.
- 페이로드의 크기가 Apigee Edge에서 허용되는 한도가 있는 경우 있습니다.
백엔드 서버의 샘플 응답:
curl -v https://BACKENDSERVER-HOSTNAME/testfile
* About to connect() to 10.14.0.10 port 9000 (#0) * Trying 10.14.0.10... * Connected to 10.14.0.10 (10.148.0.10) port 9000 (#0) > GET /testfile HTTP/1.1 > User-Agent: curl/7.29.0 > Host: 10.14.0.10:9000 > Accept: */* > < HTTP/1.1 200 OK < Accept-Ranges: bytes < Content-Length: 11534336 < Content-Type: application/octet-stream < Last-Modified: Wed, 30 Jun 2021 08:18:02 GMT < Date: Wed, 30 Jun 2021 09:22:41 GMT < ----snipped---- <Response Body>
위의 예에서는
Content-Length: 11534336 (which is ~11 MB)
이 허용되는 한도를 보여줍니다.
해상도
해결 방법을 참고하세요.
원인: 다음 날짜 이후에 응답 페이로드 크기가 허용된 제한을 초과합니다. 압축 해제
응답 페이로드가 압축 형식과 응답 헤더로 전송되는 경우
Content-Encoding
를 gzip,
로 설정하면 Apigee가 응답 압축을 해제합니다.
페이로드가 포함되어 있습니다 압축 해제 프로세스 중 Apigee가 페이로드 크기가 더 크다고 확인한 경우
Apigee Edge에서 허용되는 한도보다 크면 더 이상 중지됩니다.
압축 해제 및 절전 모드 해제를 위해
502 Bad Gateway
및 오류 코드 protocol.http.TooBigBody
가 포함됩니다.
진단
- 다음에 대한 오류 코드, 오류 소스 및 응답 페이로드 크기를 결정합니다. 'API 모니터링', '추적 도구' 또는 'NGINX 액세스' 로그를 사용할 때 시나리오 #2의 일반적인 진단 단계.
- 결함 소스의 값이
target
이면 대상/백엔드 애플리케이션에서 Apigee로 전송한 응답 페이로드 크기가 Apigee Edge에서 허용되는 한도입니다. - 1단계에서 결정한 응답 페이로드 크기를 확인합니다.
- 페이로드 크기가 10MB 한도로 늘어난 경우 오류의 원인이 됩니다.
- 페이로드 크기의 허용 한도가 10MB 이하인 경우 응답 페이로드가 압축된 형식으로 전달됩니다 이 경우 압축된 이미지의 압축되지 않은 크기가 응답 페이로드를 계산합니다.
- 대상/백엔드의 응답이 압축된 형식으로 전송되었는지
압축되지 않은 크기가 다음 중 하나를 사용하여 허용되는 한도보다 큽니다.
메서드:
Trace
Trace 도구 사용:
- 실패한 요청의 trace를 캡처한 경우 다음에 자세히 설명된 단계를 참조하세요.
Trace 및
<ph type="x-smartling-placeholder">
- </ph>
- target.received.content.length 값을 결정합니다.
- 클라이언트의 요청에
Content-Encoding:
gzip
헤더
- target.received.content.length 값이 허용되는 10MB 정도인 경우
응답 헤더 Content-Encoding:
gzip
인 경우 확인할 수 있습니다
실제 요청
실제 요청 사용:
- 대상/백엔드 서버에 대한 실제 요청에 액세스할 수 없는 경우 문제 해결로 이동합니다.
- 대상/백엔드 서버에 대한 실제 요청에 액세스할 수 있는 경우
다음 단계를 따르세요.
<ph type="x-smartling-placeholder">
- </ph>
- 응답에서 전달된 페이로드의 크기를
Content-Encoding
헤더가 응답에서 전송되었습니다. - 응답 헤더
Content-Encoding
가gzip
이고 압축되지 않은 페이로드 크기가 Apigee Edge에서 허용되는 한도가 있다면 확인할 수 있습니다.백엔드 서버에서 수신된 샘플 응답:
curl -v https://BACKENDSERVER-HOSTNAME/testzippedfile.gz
* About to connect() to 10.1.0.10 port 9000 (#0) * Trying 10.1.0.10... * Connected to 10.1.0.10 (10.1.0.10) port 9000 (#0) > GET /testzippedfile.gz HTTP/1.1 > User-Agent: curl/7.29.0 > Host: 10.1.0.10:9000 > Accept: */* > < HTTP/1.1 200 OK < Accept-Ranges: bytes < Content-Encoding: gzip < Content-Type: application/x-gzip < Last-Modified: Wed, 30 Jun 2021 08:18:02 GMT < Testheader: test < Date: Wed, 07 Jul 2021 10:14:16 GMT < Transfer-Encoding: chunked < ----snipped---- <Response Body>
위의 경우
Content-Encoding: gzip
헤더가 전송되고 응답의testzippedfile.gz
파일 크기가 압축되지 않은 파일testzippedfile
의 크기가 최대 15MB
- 응답에서 전달된 페이로드의 크기를
메시지 프로세서 로그
메시지 프로세서 로그 사용:
<ph type="x-smartling-placeholder">- 프라이빗 클라우드 사용자인 경우 메시지 프로세서 로그를 사용하여
HTTP
502
오류에 대한 주요 정보를 확인할 수 있습니다. 메시지 프로세서 로그 확인
/opt/apigee/var/log/edge-message-processor/logs/system.log
특정 기간 동안
502
오류가 있는지 검색합니다. (과거에 문제가 발생한 경우) 또는 여전히502
다음과 같은 검색 문자열을 사용할 수 있습니다.grep -ri "chunkCount"
grep -ri "BadGateway: Body buffer overflow"
system.log
에서 아래와 유사한 줄이 표시됩니다.TotalRead
및chunkCount
는 상황에 따라 다를 수 있습니다.2021-07-07 09:40:47,012 NIOThread@7 ERROR HTTP.SERVICE - TrackingInputChannel.checkMessageBodyTooLarge() : Message is too large. TotalRead 10489856 chunkCount 2571 2021-07-07 09:40:47,012 NIOThread@7 ERROR HTTP.CLIENT - HTTPClient$Context.onInputException() : ClientInputChannel(ClientChannel[Connected: Remote:10.148.0.10:9000 Local:10.148.0.9:42240]@9155 useCount=1 bytesRead=0 bytesWritten=182 age=23ms lastIO=0ms isOpen=true).onExceptionRead exception: {} com.apigee.errors.http.server.BadGateway: Body buffer overflow 2021-07-07 09:40:47,012 NIOThread@7 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError(HTTPResponse@77cbd7c4, Body buffer overflow)
압축 해제 프로세스 중 메시지 프로세서가 총 읽기 바이트 10MB인 경우 중지되고 다음 줄을 출력합니다.
Message is too large. TotalRead 10489856 chunkCount 2571
이는 응답 페이로드 크기가 10MB를 초과하고 Apigee 크기가 한도(10MB)를 초과하기 시작하면 오류 코드가 <ph type="x-smartling-placeholder">
<ph type="x-smartling-placeholder">protocol.http.TooBigBody
</ph>
- 실패한 요청의 trace를 캡처한 경우 다음에 자세히 설명된 단계를 참조하세요.
Trace 및
<ph type="x-smartling-placeholder">
해상도
크기 수정
옵션 1[권장]: 페이로드 크기가 Apigee 한도를 초과하지 않도록 대상 서버 애플리케이션 수정
<ph type="x-smartling-placeholder">- 특정 대상 서버가 응답 / 페이로드 크기를 전송하는 이유를 분석합니다. 에 정의된 허용 한도를 초과합니다. 제한사항.
- 바람직하지 않은 경우 대상 서버 애플리케이션을 수정하여 응답 / 페이로드 크기가 허용 한도보다 작습니다.
- 바람직하며 허용된 것보다 많은 응답/페이로드를 전송하려는 경우 다음 옵션으로 이동합니다
서명된 URL 패턴
옵션 2 [권장]: Apigee Java콜아웃 내에서 서명된 URL 패턴 사용
<ph type="x-smartling-placeholder">10MB보다 큰 페이로드의 경우 Apigee는 Apigee 자바 콜아웃 <ph type="x-smartling-placeholder"></ph> GitHub의 Edge 콜아웃: 서명된 URL 생성기 예
스트리밍
옵션 #3: 스트리밍 사용
API 프록시가 매우 큰 요청 및/또는 응답을 처리해야 하는 경우, Apigee에서 스트리밍을 사용 설정합니다.
<ph type="x-smartling-placeholder">CwC
옵션 4: CwC 속성을 사용하여 버퍼 한도 늘리기
<ph type="x-smartling-placeholder">이 옵션은 기본 크기를 늘리면 성능 문제가 발생할 수 있습니다.
Apigee는 <ph type="x-smartling-placeholder"></ph> 요청 및 응답 페이로드 크기를 늘릴 수 있는 CwC 속성 있습니다. 자세한 내용은 다음을 참고하세요. <ph type="x-smartling-placeholder"></ph> 라우터 또는 메시지 프로세서의 메시지 크기 한도 설정
<ph type="x-smartling-placeholder">한도
Apigee는 클라이언트 애플리케이션 및 백엔드 서버에서 다음보다 큰 페이로드 크기를 전송하지 않을 것으로 예상합니다.
의
Request/response size
에 설명된 허용 한도
Apigee Edge 한도
- 퍼블릭 클라우드 사용자인 경우 요청 및 응답의 최대 한도
페이로드 크기는 다음의
Request/response size
에 대해 문서화되어 있습니다. Apigee Edge 한도. - Private Cloud 사용자 의 경우 기본 최댓값을 수정했을 수 있습니다. 요청 및 응답 페이로드 크기에 대한 제한이 없습니다. 다음 안내에 따라 최대 요청 페이로드 크기 한도를 결정할 수 있습니다. 현재 한도를 확인하는 방법
현재 한도를 확인하는 방법
<ph type="x-smartling-placeholder">
이 섹션에서는 속성이
메시지에서 HTTPResponse.body.buffer.limit
이(가) 새 값으로 업데이트되었습니다.
프로세서.
메시지 프로세서 머신에서 속성
/opt/apigee/edge-message- processor/conf
디렉터리의HTTPResponse.body.buffer.limit
를 찾고 아래와 같이 설정된 값을 확인합니다.grep -ri "HTTPResponse.body.buffer.limit" /opt/apigee/edge-message-processor/conf
위 명령어의 샘플 결과는 다음과 같습니다.
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.body.buffer.limit=10m
위의 예시 출력에서 속성이
HTTPResponse.body.buffer.limit
이(가)10m
값으로 설정되었습니다.http.properties
입니다.이는 Apigee에서 구성된 요청 페이로드 크기의 한도를 프라이빗 클라우드는 10MB입니다.
Apigee 지원팀의 도움이 더 필요하면 로 이동하세요. 진단 정보를 수집해야 합니다.
진단 정보 수집 필요
다음 진단 정보를 수집한 후 Apigee Edge 지원팀에 문의하세요.
퍼블릭 클라우드 사용자인 경우 다음 정보를 입력합니다.
- 조직 이름
- 환경 이름
- API 프록시 이름
502
오류를 재현하는 데 사용된 전체 curl 명령어- API 요청에 대한 추적 파일
- 페이로드 크기와 함께 대상/백엔드 서버의 전체 응답 출력
Private Cloud 사용자인 경우 다음 정보를 입력합니다.
- 실패한 요청에 대해 발견된 전체 오류 메시지
- 조직 이름
- 환경 이름
- API 프록시 번들
- 실패한 API 요청의 추적 파일
502
오류를 재현하는 데 사용된 전체 curl 명령어- 페이로드 크기와 함께 대상/백엔드 서버의 전체 응답 출력
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