502 잘못된 게이트웨이 - TooBigHeaders

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

증상

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

오류 메시지

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

HTTP/1.1 502 Bad Gateway

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

{
   "fault":{
      "faultstring":"response headers size exceeding 25,600",
      "detail":{
         "errorcode":"protocol.http.TooBigHeaders"
      }
   }
}

가능한 원인

이 오류는 HTTP 응답의 일부로 대상/백엔드 서버에서 Apigee Edge로 전송되는 헤더의 총 크기가 Apigee Edge에서 허용되는 허용 한도보다 큰 경우에 발생합니다.

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

원인 설명 다음에 관한 문제 해결 안내
응답의 헤더 크기가 허용된 한도보다 큼 특정 헤더의 헤더 크기 또는 Apigee Edge에 대한 HTTP 응답의 일부로 대상/백엔드 서버에서 전송되는 모든 헤더의 헤더 크기 합계가 Apigee Edge에서 허용되는 한도보다 큽니다. Edge Public 및 Private Cloud 사용자

일반적인 진단 단계

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

API 모니터링

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

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

  3. 분석 > API 모니터링 > 조사 페이지로 이동합니다.
  4. 오류가 발생한 특정 기간을 선택합니다.
  5. 프록시 필터를 선택하여 오류 코드를 좁힐 수 있습니다.
  6. 오류 코드 를 시간 에 대해 표시합니다.
  7. 아래와 같이 오류 코드 protocol.http.TooBigHeaders가 있는 셀을 선택합니다.

    ( 큰 이미지 보기)

  8. 아래와 같이 오류 코드 protocol.http.TooBigHeaders에 대한 정보가 표시됩니다.

    ( 큰 이미지 보기)

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

    ( 큰 이미지 보기)

  10. 로그 창에서 다음 세부정보를 확인합니다.
    • 상태 코드: 502
    • 오류 소스: target
    • 오류 코드: protocol.http.TooBigHeaders.
  11. 오류 소스 의 값이 target이고 오류 코드 의 값이 protocol.http.TooBigHeaders이면 대상/ 백엔드 서버의 HTTP 응답에 Apigee Edge에서 허용되는 한도보다 큰 헤더가 있음을 나타냅니다.

Trace 도구

  1. trace 세션을 사용 설정하고 다음 중 하나를 수행합니다.
    1. 502 Bad Gateway 오류가 발생할 때까지 기다립니다.
    2. 문제를 재현할 수 있는 경우 API를 호출하고 502 Bad Gateway 오류를 재현합니다.
  2. 실패한 요청 중 하나를 선택하고 trace를 검토합니다.
  3. trace의 여러 단계를 탐색하고 실패가 발생한 위치를 찾습니다.
  4. 일반적으로 아래와 같이 대상 서버에 전송된 요청 단계 바로 뒤에 오류 라는 흐름에서 이 오류가 표시됩니다.

    ( 큰 이미지 보기)

    trace에서 오류 값을 확인합니다.

    • 오류: response headers size exceeding 25,600
    • error.class: com.apigee.errors.http.server.BadGateway

    이는 Apigee Edge (메시지 프로세서 구성요소)가 허용된 한도를 초과하는 헤더 크기로 인해 백엔드 서버에서 응답을 수신하는 즉시 오류를 발생시킨다는 것을 나타냅니다.

  5. 아래와 같이 Apigee Edge에서 전송한 클라이언트에 전송된 응답 오류 응답에서 실패가 표시됩니다.

    ( 큰 이미지 보기)

  6. trace에서 오류 값을 확인합니다. 위의 샘플 trace는 다음을 보여줍니다.
    • 오류: 502 Bad Gateway.
    • 오류 콘텐츠: {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
  7. trace의 AX (기록된 분석 데이터) 단계로 이동하여 클릭하면 관련 세부정보가 표시됩니다.

    ( 큰 이미지 보기)

    다음을 확인합니다.

    오류 헤더 값
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source target
    오류 콘텐츠: 본문 {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}

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.TooBigHeaders가 있는 502 오류가 있는지 또는 502로 인해 여전히 실패하는 요청이 있는지 검색합니다.
  4. X-Apigee-fault-code 가 protocol.http.TooBigHeaders 값과 일치하는 502 오류를 발견한 경우 X-Apigee-fault-source 값을 확인합니다.

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

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

    오류 헤더 값
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source target

원인: 응답의 헤더 크기가 허용된 한도보다 큼

진단

  1. 일반적인 진단 단계에 설명된 대로 API 모니터링, Trace 도구 또는 NGINX 액세스 로그를 사용하여 관찰된 오류의 오류 코드, 오류 소스, 응답 페이로드 크기를 확인합니다.
  2. 오류 소스 의 값이 target이면 대상/백엔드 서버에서 Apigee로 전송되는 응답에 Apigee Edge에서 허용되는 한도보다 큰 헤더가 있음을 나타냅니다.
  3. 다음 방법 중 하나를 사용하여 대상/백엔드의 응답에 허용된 한도보다 큰 헤더가 있는지 확인할 수 있습니다.

    오류 메시지

    오류 메시지를 사용하여 확인하려면 다음 단계를 따르세요.

    Apigee Edge에서 수신한 전체 오류 메시지에 액세스할 수 있는 경우 faultstring을 참조하세요. faultstring은 응답 헤더 크기가 허용된 한도를 초과했음을 나타냅니다.

    샘플 오류 메시지:

    "faultstring":"response headers size exceeding 25,600"

    위의 오류 메시지에서 faultstring에 응답에 허용된 한도를 초과하는 헤더가 있음을 확인합니다.

    실제 요청

    실제 요청을 사용하여 확인하려면 다음 단계를 따르세요.

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

    1. Public Cloud/Private Cloud 사용자인 경우 백엔드 서버 자체 또는 백엔드 서버에 요청을 보낼 수 있는 다른 머신에서 백엔드 서버로 직접 요청을 보냅니다.
    2. Private Cloud 사용자 인 경우 메시지 프로세서 중 하나에서 백엔드 서버로 요청을 보낼 수도 있습니다.
    3. 백엔드 서버에서 수신한 응답을 검토하고 특히 응답에서 전달된 헤더의 총 크기를 계산하고 확인합니다.
    4. 응답 페이로드의 헤더 크기 가 Apigee Edge에서 허용되는 한도보다 큰 경우 문제가 발생한 것입니다.

      대상 서버의 샘플 응답:

      curl -v https://TARGET_SERVER_HOST/test
      
      * 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 /test 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-Length: 0
      < Content-Type: text/plain; charset=utf-8
      < Last-Modified: Tue, 20 Jul 2021 09:23:56 GMT
      < Testheader1: XVlBzgba—-<snipped>---THctcuAx
      < Testheader2: hxKQFDaFpLSj—-<snipped>---FbcXoEFfRsWxP
      < Date: Fri, 23 Jul 2021 09:51:22 GMT
      <
      * Connection #0 to host 10.1.0.10 left intact
      

      위의 예에서 Testheader1 및 Testheader2의 크기가 더 큽니다. 이는 Apigee Edge에서 허용되는 한도를 초과하므로 이 오류의 원인이 됩니다.

    메시지 프로세서 로그

    메시지 프로세서 로그를 사용하여 확인하려면 다음 단계를 따르세요.

    Private Cloud 사용자라면 메시지 프로세서 로그를 사용하여 응답 헤더 크기가 Apigee Edge에서 허용되는 한도를 초과했는지 확인할 수 있습니다.

    1. 메시지 프로세서 로그를 확인합니다.

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

    2. 특정 기간 동안 (문제가 과거에 발생한 경우) 502 오류가 있는지 또는 502로 인해 여전히 실패하는 요청이 있는지 검색합니다. 다음 검색어를 사용할 수 있습니다.
      grep -ri "response headers size exceeding"
      
    3. 다음과 비슷한 system.log의 행이 표시됩니다. 응답 헤더 크기는 경우에 따라 다를 수 있습니다.
      2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1
      messageid:r23ijb1b-1  NIOThread@1 ERROR HTTP.CLIENT -
      HTTPClient$Context$3.onException() :  ClientChannel[Connected:
      Remote:3.7.1.1:9000 Local:192.168.2.1:56098]@8414 useCount=1
      bytesRead=0 bytesWritten=207 age=640ms  lastIO=0ms  isOpen=true.onExceptionRead
      exception: {}
      com.apigee.errors.http.server.BadGateway: response headers size exceeding 25,600
      
      2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest
      rev:1 messageid:r23ijb1b-1  NIOThread@1 ERROR ADAPTORS.HTTP.FLOW -
      AbstractResponseListener.onException() : AbstractResponseListener.onError
      (HTTPResponse@31f3ef88, response headers size exceeding 25,600)
    4. 메시지 프로세서가 백엔드/대상 서버에서 응답을 수신하고 헤더의 총 크기가 25KB보다 크다는 것을 확인하는 즉시 중지되고 오류가 발생합니다.

      response headers size exceeding 25,600

      이는 총 헤더 크기 가 25KB보다 크고 Apigee 오류 코드가 protocol.http.TooBigHeaders인 한도 25KB를 초과하기 시작하면 오류가 발생함을 의미합니다.

해상도

크기 수정

옵션 1[권장]: 대상 서버 애플리케이션이 Apigee 한도를 초과하는 헤더 크기를 전송하지 않도록 수정

  1. 한도에 정의된 대로 특정 대상 서버가 허용된 한도보다 큰 응답 헤더 크기를 전송하는 이유를 분석합니다.
  2. 원하지 않는 경우 백엔드 서버 애플리케이션이 Apigee Edge에서 허용되는 한도보다 작은 응답 헤더를 전송하도록 수정합니다.
  3. 헤더 정보를 응답 본문의 일부로 전송할 수 있는지 확인합니다.
  4. 가능한 경우 응답 본문의 헤더 일부로 전송하려는 큰 정보를 전송합니다. 이렇게 하면 응답 헤더 한도를 초과하지 않습니다.

CwC

옵션 2 : CwC 속성을 사용하여 응답 헤더 크기 한도 늘리기

Apigee는 응답 헤더 크기 한도를 늘릴 수 있는 CwC 속성을 제공합니다. 자세한 내용은 메시지 프로세서의 한도 구성을 참조하세요.

한도

Apigee는 클라이언트 애플리케이션과 백엔드 서버가 Apigee Edge 한도의 요청/응답 헤더 크기에 문서화된 대로 허용된 한도보다 큰 헤더 크기를 전송하지 않도록 합니다. Apigee Edge 한도.

  1. Public Cloud 사용자인 경우 요청 및 응답 헤더 크기의 최대 한도는 요청/응답 헤더 크기에 문서화된 대로입니다. Apigee Edge 한도
  2. Private Cloud 사용자 인 경우 요청 및 응답 헤더 크기의 기본 최대 한도를 수정했을 수 있습니다 (권장되는 방법은 아님). 현재 한도를 확인하는 방법 의 안내에 따라 최대 응답 헤더 크기 한도를 확인할 수 있습니다.

현재 한도를 확인하는 방법

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

  1. 메시지 프로세서 머신에서 HTTPResponse.headers.limit 디렉터리의 /opt/apigee/edge-message-processor/conf 속성을 검색하고 아래와 같이 설정된 값을 확인합니다.
    grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
    
  2. 위 명령어의 샘플 결과는 다음과 같습니다.
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
  3. 위의 출력 예에서 http.properties의 HTTPResponse.headers.limit 속성이 25k 값으로 설정되어 있음을 확인합니다.

    이는 Private Cloud용 Apigee에 구성된 응답 페이로드 크기의 한도가 25KB 임을 나타냅니다.

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

진단 정보 수집 필요

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

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

  • 조직 이름
  • 환경 이름
  • API 프록시 이름
  • 502 오류를 재현하는 데 사용된 전체 curl 명령어
  • API 요청의 trace 파일
  • 헤더 크기와 함께 대상/백엔드 서버의 응답 전체 출력

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

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