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