502 잘못된 게이트웨이 - TooBigBody

<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 모니터링을 사용하여 오류를 진단하려면 다음 안내를 따르세요.

  1. <ph type="x-smartling-placeholder"></ph> 다음 계정으로 Apigee Edge UI에 로그인: 역할을 수행하는 것이 좋습니다.
  2. 문제를 조사하려는 조직으로 전환합니다.

  3. 분석 > API 모니터링 > 조사 페이지를 엽니다.
  4. 오류가 관찰된 특정 기간을 선택합니다.
  5. 프록시 필터를 선택하여 오류 코드의 범위를 좁힐 수 있습니다.
  6. 시간을 기준으로 결함 코드를 표시합니다.
  7. 오류 코드가 protocol.http.TooBigBody인 셀을 선택하세요. 다음과 같습니다.

  8. 오류 코드에 대한 정보가 표시됩니다. protocol.http.TooBigBody는 다음과 같습니다.

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

  10. 로그 창에서 다음 세부정보를 확인합니다. <ph type="x-smartling-placeholder">
      </ph>
    • 상태 코드: 502
    • 오류 소스: target
    • 오류 코드: protocol.http.TooBigBody.
  11. 결함 소스의 값이 target이고 결함 코드가 있는 경우 값이 protocol.http.TooBigBody이면 응답의 페이로드 크기가 Apigee Edge에서 허용되는 한도입니다.

Trace

<ph type="x-smartling-placeholder">

Trace 도구를 사용하여 오류를 진단하는 방법은 다음과 같습니다.

  1. 추적 세션을 사용 설정하고 다음 중 하나를 수행합니다. <ph type="x-smartling-placeholder">
      </ph>
    • 502 Bad Gateway 오류가 발생할 때까지 기다립니다.
    • 문제를 재현할 수 있다면 API를 호출하고 재현합니다. 오류 502 Bad Gateway
  2. 실패한 요청 중 하나를 선택하고 trace를 검토합니다.
  3. 추적의 여러 단계를 살펴보고 오류가 발생한 위치를 찾습니다.
  4. 대상에서 응답을 수신한 직후 오류 단계로 이동합니다. 서버 단계를 실행합니다.

    트레이스에서 오류 값을 확인합니다.

    • 오류: Body buffer overflow
    • error.class: com.apigee.errors.http.server.BadGateway

    이는 Apigee Edge (메시지 프로세서 구성요소)가 실행되자마자 백엔드 서버에서 응답을 수신하는데, 페이로드 크기가 허용된 있습니다.

  5. 아래와 같이 Response Sent to Client 단계에서 실패가 표시됩니다.

  6. 트레이스에서 오류 값을 확인합니다. 위의 샘플 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>
  7. 여러 시나리오에 대해 아래에 나와 있는 것처럼 Response Received from target server(대상 서버에서 응답 수신) 단계로 이동합니다.

    비압축

    시나리오 #1: 비압축 형식으로 전송된 응답 페이로드

    트레이스에서 오류 값을 확인합니다.

    • 대상 서버에서 응답 수신: 200 OK
    • Content-Length (응답 헤더 섹션): 최대 11MB

    압축

    시나리오 #2: 압축된 형식으로 전송된 요청 페이로드

    트레이스에서 오류 값을 확인합니다.

    • 대상 서버에서 응답 수신: 200 OK
    • Content-Encoding: 응답 헤더에 이 헤더가 표시되는 경우 섹션에서 값을 기록합니다. 예를 들어, 이 예에서 값은 gzip
  8. Response Content 섹션의 Body를 확인합니다.

    {"fault":{"faultstring":"Body buffer overflow","detail":{"errorcode":"protocol.http.TooBigBody"}}}
    
    <ph type="x-smartling-placeholder">
  9. 트레이스의 AX (애널리틱스 데이터 기록됨) 단계로 이동하여 클릭합니다. 관련 세부정보를 볼 수 있습니다.

  10. 단계 세부정보에서 아래로 스크롤하여 변수 읽기 섹션으로 이동한 후 다음을 나타내는 target.received.content.length 값: <ph type="x-smartling-placeholder">
      </ph>
    • 비압축 형식으로 전송될 때 응답 페이로드의 실제 크기
    • 페이로드가 다음과 같은 경우 Apigee가 압축 해제할 때 응답 페이로드의 크기입니다. 압축된 형식으로 전송됩니다 허용되는 한도 (10MB)로 제한됩니다.
    를 통해 개인정보처리방침을 정의할 수 있습니다. <ph type="x-smartling-placeholder">

    비압축

    시나리오 #1: 비압축 형식으로 전송된 응답 페이로드

    target.received.content.length 값을 확인하세요.

    요청 헤더
    target.received.content.length ~11MB

    압축

    시나리오 #2: 압축된 형식으로 전송된 요청 페이로드

    target.received.content.length 값을 확인하세요.

    요청 헤더
    target.received.content.length 약 10MB
  11. 다음 표에서는 다음 위치에서 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 액세스 로그를 사용하여 오류를 진단하려면 다음 안내를 따르세요.

  1. Private Cloud 사용자인 경우 NGINX 액세스 로그를 사용하여 HTTP 502 오류에 대한 주요 정보입니다.
  2. NGINX 액세스 로그를 확인합니다.

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

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

  3. 특정 기간 동안 오류 502개가 있었는지 찾기 위해( 이전에 발생한 적이 있는지) 또는 여전히 502
  4. 일치하는 X-Apigee-fault-code 502 오류가 있는 경우 protocol.http.TooBigBody의 값을 구한 다음 X-Apigee-fault-source.

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

    NGINX 액세스 로그의 위 샘플 항목에는 X-Apigee- fault-codeX-Apigee-fault-source:

    응답 헤더
    X-Apigee-fault-code protocol.http.TooBigBody
    X-Apigee-fault-source target

원인: 응답 페이로드 크기가 허용된 한도를 초과합니다.

진단

  1. 다음에 대한 오류 코드, 오류 소스, 응답 페이로드 크기를 결정합니다. API 모니터링, Trace 도구 또는 NGINX 액세스 로그를 사용하여 시나리오 #1의 일반적인 진단 단계
  2. 결함 소스의 값이 target이면 응답이 대상/백엔드 서버에서 Apigee로 전송한 페이로드 크기가 Apigee Edge에서 허용되는 한도입니다.
  3. 1단계에서 결정한 응답 페이로드 크기를 확인합니다.
  4. 응답 페이로드 크기가 실제로 >인지 확인 10MB 허용 한도 다음 단계에 따라 실제 응답을 생성합니다. <ph type="x-smartling-placeholder">
      </ph>
    1. 대상/백엔드 서버에 대한 실제 요청에 액세스할 수 없는 경우 문제 해결로 이동합니다.
    2. 대상/백엔드 서버에 대한 실제 요청에 액세스할 수 있는 경우 다음 단계를 따르세요. <ph type="x-smartling-placeholder">
        </ph>
      1. 퍼블릭 클라우드/프라이빗 클라우드 사용자인 경우 백엔드 서버 자체의 백엔드 서버 또는 백엔드 서버에 요청할 수 있게 됩니다.
      2. Private Cloud 사용자인 경우 메시지 프로세서 중 하나에서 백엔드 서버로 전송합니다.
      3. 다음을 확인하여 응답에 전달된 페이로드의 크기를 확인합니다. Content-Length 헤더.
      4. 페이로드의 크기가 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-Encodinggzip, 로 설정하면 Apigee가 응답 압축을 해제합니다. 페이로드가 포함되어 있습니다 압축 해제 프로세스 중 Apigee가 페이로드 크기가 더 크다고 확인한 경우 Apigee Edge에서 허용되는 한도보다 크면 더 이상 중지됩니다. 압축 해제 및 절전 모드 해제를 위해 502 Bad Gateway 및 오류 코드 protocol.http.TooBigBody가 포함됩니다.

진단

  1. 다음에 대한 오류 코드, 오류 소스응답 페이로드 크기를 결정합니다. 'API 모니터링', '추적 도구' 또는 'NGINX 액세스' 로그를 사용할 때 시나리오 #2의 일반적인 진단 단계.
  2. 결함 소스의 값이 target이면 대상/백엔드 애플리케이션에서 Apigee로 전송한 응답 페이로드 크기가 Apigee Edge에서 허용되는 한도입니다.
  3. 1단계에서 결정한 응답 페이로드 크기를 확인합니다.
    • 페이로드 크기가 10MB 한도로 늘어난 경우 오류의 원인이 됩니다.
    • 페이로드 크기의 허용 한도가 10MB 이하인 경우 응답 페이로드가 압축된 형식으로 전달됩니다 이 경우 압축된 이미지의 압축되지 않은 크기가 응답 페이로드를 계산합니다.
  4. 대상/백엔드의 응답이 압축된 형식으로 전송되었는지 압축되지 않은 크기가 다음 중 하나를 사용하여 허용되는 한도보다 큽니다. 메서드:

    Trace

    Trace 도구 사용:

    1. 실패한 요청의 trace를 캡처한 경우 다음에 자세히 설명된 단계를 참조하세요. Trace 및 <ph type="x-smartling-placeholder">
        </ph>
      1. target.received.content.length 값을 결정합니다.
      2. 클라이언트의 요청에 Content-Encoding: gzip 헤더
    2. target.received.content.length 값이 허용되는 10MB 정도인 경우 응답 헤더 Content-Encoding: gzip 인 경우 확인할 수 있습니다

    실제 요청

    실제 요청 사용:

    1. 대상/백엔드 서버에 대한 실제 요청에 액세스할 수 없는 경우 문제 해결로 이동합니다.
    2. 대상/백엔드 서버에 대한 실제 요청에 액세스할 수 있는 경우 다음 단계를 따르세요. <ph type="x-smartling-placeholder">
        </ph>
      1. 응답에서 전달된 페이로드의 크기를 Content-Encoding 헤더가 응답에서 전송되었습니다.
      2. 응답 헤더 Content-Encodinggzip이고 압축되지 않은 페이로드 크기가 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">

    메시지 프로세서 로그

    메시지 프로세서 로그 사용:

    <ph type="x-smartling-placeholder">
    1. 프라이빗 클라우드 사용자인 경우 메시지 프로세서 로그를 사용하여 HTTP 502 오류에 대한 주요 정보를 확인할 수 있습니다.
    2. 메시지 프로세서 로그 확인

      /opt/apigee/var/log/edge-message-processor/logs/system.log

    3. 특정 기간 동안 502 오류가 있는지 검색합니다. (과거에 문제가 발생한 경우) 또는 여전히 502 다음과 같은 검색 문자열을 사용할 수 있습니다.

      grep -ri "chunkCount"
      
      grep -ri "BadGateway: Body buffer overflow"
      
    4. system.log에서 아래와 유사한 줄이 표시됩니다. TotalReadchunkCount는 상황에 따라 다를 수 있습니다.
      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)
      
    5. 압축 해제 프로세스 중 메시지 프로세서가 총 읽기 바이트 10MB인 경우 중지되고 다음 줄을 출력합니다.

      Message is too large. TotalRead 10489856 chunkCount 2571

      이는 응답 페이로드 크기가 10MB를 초과하고 Apigee 크기가 한도(10MB)를 초과하기 시작하면 오류 코드가 <ph type="x-smartling-placeholder">protocol.http.TooBigBody</ph>

      <ph type="x-smartling-placeholder">

해상도

크기 수정

옵션 1[권장]: 페이로드 크기가 Apigee 한도를 초과하지 않도록 대상 서버 애플리케이션 수정

<ph type="x-smartling-placeholder">
  1. 특정 대상 서버가 응답 / 페이로드 크기를 전송하는 이유를 분석합니다. 에 정의된 허용 한도를 초과합니다. 제한사항.
  2. 바람직하지 않은 경우 대상 서버 애플리케이션을 수정하여 응답 / 페이로드 크기가 허용 한도보다 작습니다.
  3. 바람직하며 허용된 것보다 많은 응답/페이로드를 전송하려는 경우 다음 옵션으로 이동합니다

서명된 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 한도

  1. 퍼블릭 클라우드 사용자인 경우 요청 및 응답의 최대 한도 페이로드 크기는 다음의 Request/response size에 대해 문서화되어 있습니다. Apigee Edge 한도.
  2. Private Cloud 사용자 의 경우 기본 최댓값을 수정했을 수 있습니다. 요청 및 응답 페이로드 크기에 대한 제한이 없습니다. 다음 안내에 따라 최대 요청 페이로드 크기 한도를 결정할 수 있습니다. 현재 한도를 확인하는 방법

현재 한도를 확인하는 방법

<ph type="x-smartling-placeholder">

이 섹션에서는 속성이 메시지에서 HTTPResponse.body.buffer.limit이(가) 새 값으로 업데이트되었습니다. 프로세서.

  1. 메시지 프로세서 머신에서 속성 /opt/apigee/edge-message- processor/conf 디렉터리의 HTTPResponse.body.buffer.limit를 찾고 아래와 같이 설정된 값을 확인합니다.

    grep -ri "HTTPResponse.body.buffer.limit" /opt/apigee/edge-message-processor/conf
    
  2. 위 명령어의 샘플 결과는 다음과 같습니다.

    /opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.body.buffer.limit=10m
    
  3. 위의 예시 출력에서 속성이 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