현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동 정보
증상
클라이언트 애플리케이션은 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 퍼블릭 및 프라이빗 클라우드 사용자 |
일반적인 진단 단계
다음 도구/기술 중 하나를 사용하여 이 오류를 진단하세요.
API 모니터링
API 모니터링을 사용하여 오류를 진단하려면 다음 안내를 따르세요.
- 적절한 역할이 있는 사용자로 Apigee Edge UI에 로그인합니다.
문제를 조사하려는 조직으로 전환합니다.
- 분석 > API 모니터링 > 조사 페이지로 이동합니다.
- 오류를 관찰한 특정 기간을 선택합니다.
- 프록시 필터를 선택하여 오류 코드의 범위를 좁힐 수도 있습니다.
- 시간을 기준으로 결함 코드를 표시합니다.
아래와 같이 오류 코드가
protocol.http.TooBigHeaders
인 셀을 선택합니다.( 더 큰 이미지 보기)
아래와 같이 오류 코드
protocol.http.TooBigHeaders
에 관한 정보가 표시됩니다.( 더 큰 이미지 보기)
로그 보기를 클릭하고 실패한 요청이 있는 행을 펼칩니다.
( 더 큰 이미지 보기)
- 로그 창에서 다음 세부정보를 확인합니다.
- 상태 코드:
502
- 결함 소스:
target
- 오류 코드:
protocol.http.TooBigHeaders
.
- 상태 코드:
- 오류 소스의 값이
target
이고 오류 코드의 값이protocol.http.TooBigHeaders
이면 대상/ 백엔드 서버의 HTTP 응답에 크기가 Apigee Edge의 허용 한도보다 큰 헤더가 있음을 나타냅니다.
추적 도구
- trace 세션과 다음 중 하나를 사용 설정합니다.
502 Bad Gateway
오류가 발생할 때까지 기다립니다.- 문제를 재현할 수 있는 경우 API를 호출하여
502 Bad Gateway
오류를 재현합니다.
- 실패한 요청 중 하나를 선택하고 트레이스를 검사합니다.
- trace의 여러 단계를 살펴보고 오류가 발생한 위치를 찾습니다.
일반적으로 이 오류는 아래와 같이 Request sent to target server 단계 직후에 Error라는 흐름에서 표시됩니다.
( 더 큰 이미지 보기)
트레이스에서 오류 값을 기록해 둡니다.
- 오류:
response headers size exceeding 25,600
- error.class:
com.apigee.errors.http.server.BadGateway
헤더 크기가 허용 한도를 초과하여 Apigee Edge (메시지 프로세서 구성요소)에서 백엔드 서버로부터 응답을 수신하는 즉시 오류가 발생함을 나타냅니다.
- 오류:
Apigee Edge에서 전송한 Response Sent to Client 오류 응답에 아래와 같이 실패가 표시됩니다.
( 더 큰 이미지 보기)
- 트레이스에서 오류 값을 기록합니다. 위의 샘플 trace는 다음을 보여줍니다.
- 오류:
502 Bad Gateway
- 오류 콘텐츠:
{"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
- 오류:
추적에서 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 액세스 로그를 사용하여 오류를 진단하려면 다음 안내를 따르세요.
- 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.TooBigHeaders
인502
오류가 있는지 아니면 여전히502
와 함께 실패하는 요청이 있는지 검색합니다. X-Apigee-fault-code 값과 일치하는 X-Apigee-fault-code 가 포함된
502
오류가 있는 경우 X-Apigee-fault-code 의 값을 확인합니다.NGINX 액세스 로그의 샘플 502 오류:
NGINX 액세스 로그의 위 샘플 항목에는 X-Apigee-fault-code 및 X-Apigee-fault-code 에 대한 값이 다음과 같습니다.
오류 헤더 값 X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source target
원인: 응답의 헤더 크기가 허용 한도를 초과합니다.
진단
- 일반적인 진단 단계에 설명된 대로 API Monitoring, Trace 도구 또는 NGINX 액세스 로그를 사용하여 관찰된 오류의 오류 코드, 결함 소스, 응답 페이로드 크기를 확인합니다.
- 오류 소스의 값이
target
이면 대상/백엔드 서버가 Apigee로 보낸 응답에 크기가 Apigee Edge에서 허용되는 한도보다 큰 헤더가 있음을 나타냅니다. - 다음 방법 중 하나를 사용하여 대상/백엔드의 응답에 크기가 허용된 한도보다 큰 헤더가 있는지 확인할 수 있습니다.
오류 메시지
오류 메시지를 사용하여 유효성을 검사하려면 다음 안내를 따르세요.
Apigee Edge에서 받은 전체 오류 메시지에 액세스할 수 있는 경우
faultstring
를 참조하세요.faultstring
는 응답 헤더 크기가 허용 한도를 초과했음을 나타냅니다.오류 메시지 샘플:
"faultstring":"response headers size exceeding 25,600"
위의 오류 메시지에서
faultstring
에 응답의 총 크기가 허용된 한도를 초과하는 헤더가 있음을 확인합니다.실제 요청
실제 요청을 사용하여 유효성을 검사하려면 다음 안내를 따르세요.
대상/백엔드 서버에 대한 실제 요청에 액세스할 수 있는 경우 다음 단계를 수행합니다.
- 퍼블릭 클라우드/프라이빗 클라우드 사용자인 경우 백엔드 서버 자체 또는 백엔드 서버에 요청할 수 있는 다른 머신에서 직접 백엔드 서버로 요청합니다.
- Private Cloud 사용자인 경우 메시지 프로세서 중 하나에서 백엔드 서버에 요청할 수도 있습니다.
- 백엔드 서버에서 수신한 응답을 검토하고 구체적으로 응답에 전달된 헤더의 총 크기를 계산하고 확인합니다.
응답 페이로드의 헤더 크기가 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에서 허용되는 한도를 초과하므로 이 오류가 발생했습니다.
메시지 프로세서 로그
메시지 프로세서 로그를 사용하여 유효성을 검사하려면 다음 안내를 따르세요.
프라이빗 클라우드 사용자는 메시지 프로세서 로그를 사용하여 응답 헤더 크기가 Apigee Edge에서 허용되는 한도를 초과하는지 확인할 수 있습니다.
메시지 프로세서 로그를 확인합니다.
/opt/apigee/var/log/edge-message-processor/logs/system.log
- 특정 기간 동안
502
오류가 있는지 (과거에 문제가 발생한 경우) 또는 여전히502
와 함께 실패하는 요청이 있는지 검색합니다. 다음과 같은 검색 문자열을 사용할 수도 있습니다.grep -ri "response headers size exceeding"
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)
-
메시지 프로세서는 백엔드/대상 서버로부터 응답을 받고 헤더의 총 크기가 25KB를 초과하는 것을 발견하면 즉시 중지하고 오류를 발생시킵니다.
response headers size exceeding 25,600
총 헤더 크기가 25KB를 초과하고 크기가 25KB 한도를 초과하기 시작하면 오류 코드가
protocol.http.TooBigHeaders
인 경우 Apigee에서 오류를 생성합니다.
해상도
크기 수정
옵션 #1 [권장]: 대상 서버 애플리케이션이 Apigee 한도를 초과하는 헤더 크기를 전송하지 않도록 수정
- 특정 대상 서버가 한도에 정의된 허용 한도를 초과하는 응답 헤더 크기를 보내는 이유를 분석합니다.
- 바람직하지 않은 경우 크기가 Apigee Edge에서 허용되는 한도보다 작은 응답 헤더를 전송하도록 백엔드 서버 애플리케이션을 수정합니다.
- 헤더 정보를 응답 본문의 일부로 보낼 수 있는지 확인합니다.
- 가능하다면 전송하려고 했던 대용량 정보를 응답 본문의 헤더의 일부로 전송합니다. 이렇게 하면 응답 헤더 한도를 초과하지 않습니다.
CwC
옵션 #2 : CwC 속성을 사용하여 응답 헤더 크기 한도 늘리기
Apigee는 응답 헤더 크기 한도를 늘릴 수 있는 CwC 속성을 제공합니다. 자세한 내용은 메시지 프로세서 제한 구성을 참조하세요.
한도
Apigee에서는 클라이언트 애플리케이션과 백엔드 서버에서 Apigee Edge 한도의 요청/응답 헤더 크기에 설명된 허용 한도를 초과하는 헤더 크기를 전송하지 않을 것으로 예상합니다.
- Public Cloud 사용자인 경우 요청 및 응답 헤더 크기의 최대 한도는 Apigee Edge 한도의 요청/응답 헤더 크기에 설명되어 있습니다.
- Private Cloud 사용자 의 경우 요청 및 응답 헤더 크기의 기본 최대 한도를 수정했을 수 있습니다 (권장사항은 아님). 현재 한도를 확인하는 방법의 안내에 따라 최대 응답 헤더 크기 한도를 확인할 수 있습니다.
현재 한도를 확인하는 방법
이 섹션에서는 HTTPResponse.headers.limit
속성이 메시지 프로세서의 새 값으로 업데이트되었는지 확인하는 방법을 설명합니다.
- 메시지 프로세서 시스템의
/opt/apigee/edge-message-processor/conf
디렉터리에서HTTPResponse.headers.limit
속성을 검색하고 어떤 값이 아래와 같이 설정되어 있는지 확인합니다.grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
- 위 명령어의 샘플 결과는 다음과 같습니다.
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
위의 출력 예에서
HTTPResponse.headers.limit
속성이http.properties
의25k
값으로 설정되어 있음을 알 수 있습니다.프라이빗 클라우드용 Apigee에 구성된 응답 페이로드 크기의 한도가 25KB임을 나타냅니다.
Apigee 지원의 지원이 더 필요하면 진단 정보를 수집해야 하는 경우로 이동하세요.
진단 정보 수집 필요
다음 진단 정보를 수집한 다음 Apigee Edge 지원팀에 문의하세요.
Public Cloud 사용자인 경우 다음 정보를 제공합니다.
- 조직 이름
- 환경 이름
- 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