502 잘못된 게이트웨이 - TooBigLine

<ph type="x-smartling-placeholder"></ph> 현재 Apigee Edge 문서를 보고 있습니다.
Apigee X 문서.
정보

증상

클라이언트 애플리케이션이 오류 코드와 함께 HTTP 상태 코드 502 Bad Gateway를 가져옵니다. protocol.http.TooBigLine 를 API 호출에 대한 응답으로 사용합니다.

오류 메시지

클라이언트 애플리케이션은 다음과 같은 응답 코드를 받습니다.

HTTP/1.1 502 Bad Gateway

또한 다음과 같은 오류 메시지가 표시될 수 있습니다.

{
   "fault":{
      "faultstring":"response line size exceeding 2,048",
      "detail":{
         "errorcode":"protocol.http.TooBigLine"
      }
   }
}

가능한 원인

이 오류는 Response-Line 크기가 대상/백엔드 서버에서 Apigee HTTP 응답에 포함된 에지가 허용되는 최댓값보다 큽니다. Apigee Edge의 한도

이 오류의 가능한 원인을 살펴보기 전에 응답 행이 그 크기를 확인하는 방법을 알 수 있습니다.

대응 줄 이해하기

일반적인 HTTP 응답은 다음 세 부분으로 구성됩니다.

  1. <ph type="x-smartling-placeholder"></ph> 상태 행 (Apigee에서는 응답 행이라고 함)
  2. ( HTTP 헤더 세트 )
  3. [ 본문 ]

응답 줄은 프로토콜 버전 다음에 숫자가 오는 숫자의 세 부분으로 구성됩니다. 상태 코드관련 텍스트 문구(아래 그림 참조)

Response-Line   = <HTTP-Version> <Status-Code> <Reason-Phrase>

대상/백엔드 서버 애플리케이션이 HTTP 응답을 보낼 때 첫 번째 줄은 Sent는 위에 설명된 응답 행을 나타냅니다. 그 다음에 다음 샘플 스크린샷은 curl 요청, Request 부분 및 Response 부분( 응답 줄).

응답 줄 크기 이해

  1. 위에서 설명한 샘플에서는 응답의 start 행 (첫 번째 줄)도 응답 행이라고 하는 것은 다음과 같습니다.

    HTTP/1.1 200 OK
    

    이 응답 줄에는 15 ASCII characters가 포함되어 있으므로 크기가 ~15 bytes입니다. 이는 최대 허용 한도를 설정한 경우 응답은 오류를 보여줍니다

  2. 마찬가지로 faultstring 위에 표시된 오류 메시지. "response line size exceeding 2,048"이(가) 포함되어 있습니다. HTTP 응답의 응답 행이 2,048바이트를 초과했습니다.

대규모 대응 줄 이해

포드의 정의에 따라 <ph type="x-smartling-placeholder"></ph> 상태 행 (여기서는 응답 행이라고 함) 및 일반적인 HTTP 요청 및 크기가 Apigee Edge에 정의된 기본 한도인 2K보다 훨씬 작습니다. 따라서 한도에 도달하게 됩니다. 하지만 다음과 같은 경우에는 이 한도를 초과할 수 있습니다.

  1. 대상/백엔드 서버가 HTTP 시스템이 아닙니다. HTTP가 아닌 있습니다.
  2. 대상/백엔드 서버에 문제가 있으며 HTTP의 일부로 긴 응답 줄을 전송합니다. 있습니다.

자세히 알아보기: <ph type="x-smartling-placeholder"></ph> 오류 프로토콜: http.TooBigLine, '응답 행 크기가 2,048을 초과합니다.

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

원인 설명 다음에 관한 문제 해결 안내
응답 줄 크기가 허용된 한도보다 큽니다. 요청 시 대상/백엔드 서버에서 전송한 응답 행 크기 Apigee Edge에 대한 HTTP 응답이 Apigee Edge에서 허용되는 한도 에지 퍼블릭 및 프라이빗 클라우드 사용자

일반적인 진단 단계

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

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.TooBigLine인 셀을 선택하세요. 다음과 같습니다.

    ( 더 크게 보기)

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

    ( 더 크게 보기)

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

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

추적 도구

<ph type="x-smartling-placeholder">
  1. 추적 세션 사용 설정 그리고 다음 중 한 가지 조건 충족. <ph type="x-smartling-placeholder">
      </ph>
    1. 502 Bad Gateway 오류가 발생할 때까지 기다립니다. 또는
    2. 문제를 재현할 수 있으면 API를 호출하고 502 Bad Gateway 오류를 재현합니다.
  2. 실패한 요청 중 하나를 선택하고 trace를 검토합니다.
  3. 추적의 여러 단계를 살펴보고 장애가 발생한 위치 찾기 수 있습니다.
  4. 일반적으로 이 오류는 flowinfo 오류에서 확인할 수 있습니다. Request sent to target server(대상 서버로 요청 전송됨) 단계 후 다음과 같이 처리됩니다.

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

    • 오류: response line exceeding 2,048
    • error.class: com.apigee.errors.http.server.BadGateway

    이는 Apigee Edge (메시지 프로세서 구성요소)가 다음과 같은 오류를 발생시킨다는 것을 나타냅니다. 응답 줄 크기로 인해 백엔드 서버로부터 응답을 받는 즉시 한도를 초과해서는 안 됩니다.

  5. 응답 전송: Client 단계의 다음 안내를 따르세요.

    ( 더 크게 보기)

  6. 트레이스에서 오류 값을 확인합니다. <ph type="x-smartling-placeholder">
      </ph>
    • 오류: 502 Bad Gateway
    • 오류 콘텐츠: <ph type="x-smartling-placeholder">{"fault":{"faultstring":"response line exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}</ph>
  7. 추적에서 AX (애널리틱스 데이터 기록됨) 단계로 이동할 수도 있습니다. 클릭하여 오류 세부정보를 확인합니다.

    ( 더 크게 보기)

    다음 값에 유의하세요.

    요청 헤더
    X-Apigee-fault-code protocol.http.TooBigLine
    X-Apigee-fault-source target
    오류 콘텐츠 : 본문 {"fault":{"faultstring":"response line size exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}

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.TooBigLine의 값과 일치하는 경우 X-Apigee-fault-source.

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

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

원인: 응답 줄 크기가 허용 한도를 초과합니다.

진단

  1. API를 사용하여 관찰된 오류의 결함 코드오류 소스 확인 다음 도움말에 설명된 대로 Monitoring, Trace 도구 또는 NGINX 액세스 로그 일반적인 진단 단계.
  2. 결함 소스의 값이 target이면 대상/백엔드 서버 애플리케이션에서 Apigee로 보낸 응답 줄 크기가 Apigee Edge에서 허용되는 한도입니다.
  3. 다음 코드 한 개를 사용하여 응답 줄 크기가 2KB 허용 한도를 초과했는지 확인할 수 있습니다. 다음 메서드 중 하나를 사용하세요.

    오류 메시지

    오류 메시지를 사용하여 유효성을 검사하려면 다음 안내를 따르세요.

    Apigee Edge에서 받은 전체 오류 메시지에 액세스할 수 있는 경우 다음을 참고하세요. faultstring

    샘플 오류 메시지:

    "faultstring":"response line size exceeding 2,048"
    

    위의 faultstring는 응답 줄 크기가 허용된 한도를 초과했음을 나타냅니다. 2KB로 제한됩니다.

    실제 요청

    실제 요청을 사용하여 검증하려면 다음 안내를 따르세요.

    대상/백엔드 서버에 대한 실제 요청에 액세스할 수 있는 경우 다음 단계를 수행합니다.

    1. 응답 줄 크기 확인
    2. URI의 크기가 Apigee Edge에서 허용되는 한도가 있는 경우 있습니다.

      대상/백엔드 서버의 샘플 응답:

      curl -v http://HOSTALIAS/test
      
      *   Trying 3.2.1.4...
      * TCP_NODELAY set
      * Connected to <hostalias> (3.2.1.4) port 80 (#0)
      > GET /test HTTP/1.1
      > Host: HOSTALIAS
      > User-Agent: curl/7.64.1
      > Accept: */*
      >
      < HTTP/1.1 200 1111…<trimmed>...11111111
      < Date: Mon, 26 Jul 2021 07:07:18 GMT
      < Content-Type: application/json
      < Content-Length: 269
      < Connection: keep-alive
      < Server: gunicorn/19.9.0
      < Access-Control-Allow-Origin: *
      < Access-Control-Allow-Credentials: true
      <
      {
      <Response Body>
      }
      * Connection #0 to host <hostalias> left intact
      * Closing connection 0
      

      위의 경우 응답 줄 HTTP/1.1 200 1111…<trimmed>...11111111이 2KB보다 큽니다. 즉, ASCII 문자로 구성되어야 합니다.

      다른 클라이언트를 사용 중인 경우 클라이언트 로그를 검토하여 Apigee Edge로 전송되는 응답 줄의 크기를 확인하세요.

    메시지 프로세서 로그

    메시지 프로세서 로그를 사용하여 유효성을 검사하려면 다음 단계를 따르세요.

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

    프라이빗 클라우드 사용자인 경우 메시지 프로세서 로그를 사용하여 응답 줄 크기가 Apigee Edge에서 허용되는 한도

    1. API 모니터링, Trace 도구, 일반적인 진단 단계에 설명된 대로 NGINX 액세스 로그를 사용할 수 있습니다.
    2. 메시지 프로세서 로그에서 메시지 ID를 검색합니다.

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

    3. system.log에서 다음과 유사한 줄이 표시됩니다.

      2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1
      NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() :
      ClientChannel[Connected: Remote:3.2.1.2:80 Local:192.168.205.251:44398]@20592
      useCount=1 bytesRead=0 bytesWritten=201 age=144ms  lastIO=0ms  isOpen=true.onExceptionRead
      exception: {}
      com.apigee.errors.http.server.BadGateway: response line size exceeding 2,048
      at <snipped>
      
      2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1
      messageid:r-5110240-1  NIOThread@1 ERROR ADAPTORS.HTTP.FLOW -
      AbstractResponseListener.onException() : AbstractResponseListener.onError
      (HTTPResponse@6a5d6c33, response line size exceeding 2,048)
      

      위의 텍스트 message = response line size exceeding 2,048 오류 메시지는 응답 줄 크기가 2KB를 초과함을 나타냅니다. 따라서 Apigee Edge가 예외를 발생시키고 다음이 포함된 502 상태 코드를 반환합니다. 클라이언트 애플리케이션에 protocol.http.TooBigline 오류 코드를 전달합니다.

해상도

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

크기 수정

옵션 #1 [권장]: 대상/백엔드 서버 애플리케이션을 전송하지 않도록 수정 응답 줄 크기가 허용된 한도를 초과합니다.

<ph type="x-smartling-placeholder">
  1. 특정 고객이 응답 줄을 더 많이 보내는 이유를 분석합니다. 한도에 정의된 허용 한도를 초과할 수 없습니다.
  2. 바람직하지 않은 경우 대상/백엔드 서버 애플리케이션을 는 허용 한도보다 작은 크기의 응답 행을 전송합니다.
  3. 바람직하며 응답 행 크기를 다음 옵션으로 이동하세요.

CwC

옵션 #2: CwC 속성을 사용하여 응답 줄 한도 늘리기

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

Apigee는 CwC 속성을 사용하여 응답 행 크기 제한을 늘릴 수 있습니다. 자세한 내용은 <ph type="x-smartling-placeholder"></ph> 메시지 프로세서의 응답 줄 제한 설정

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

한도

Apigee에서 클라이언트 애플리케이션 및 백엔드 서버가 요청/응답 줄을 전송하지 않을 것으로 예상합니다. 요청/응답 행 제한에 문서화된 허용 한도를 초과하는 크기 Apigee Edge 한도에서 확인하세요.

  1. 퍼블릭 클라우드 사용자인 경우 요청 및 응답 행 크기는 요청/응답 행 크기 Apigee Edge 한도.
  2. Private Cloud 사용자 의 경우 기본 최댓값을 수정했을 수 있습니다. 요청 및 응답 줄 크기에 대한 제한이 없습니다 (권장되는 방법은 아님). 다음 지침에 따라 최대 응답 줄 크기 제한을 결정할 수 있습니다. 현재 한도를 확인하는 방법

현재 한도를 확인하는 방법

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

이 섹션에서는 HTTPResponse.line.limit 속성이 다음과 같은지 확인하는 방법을 설명합니다. 메시지 프로세서의 새 값으로 업데이트되었습니다.

  1. 메시지 프로세서 머신에서 속성 HTTPResponse.line.limit /opt/apigee/edge-message-processor/conf 디렉터리에서 다음을 선택합니다. 아래와 같이 설정된 값을 확인할 수 있습니다. <ph type="x-smartling-placeholder">
    grep -ri "HTTPResponse.line.limit" /opt/apigee/edge-message-processor/conf
    
    </ph>
  2. 위 명령어의 샘플 결과는 다음과 같습니다.
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.line.limit=2k
    
  3. 위의 출력 예에서 HTTPResponse.line.limit 속성이 http.properties에서 2k 값으로 설정되었습니다.

    Apigee에서 비공개용으로 구성된 응답 줄 크기의 한도를 나타냅니다. 클라우드는 2KB입니다.

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