<ph type="x-smartling-placeholder"></ph>
현재 Apigee Edge 문서를 보고 있습니다.
Apigee X 문서. 정보
증상
클라이언트 애플리케이션이 다음 메시지와 함께 HTTP 상태 코드 504
를 수신합니다.
API 호출에 대한 응답으로 Gateway Timeout
입니다.
이 오류 응답은 클라이언트가 Apigee Edge에서 적시에 응답을 받지 못했음을 나타냅니다. 백엔드 서버에 전달될 수 있습니다.
오류 메시지
클라이언트 애플리케이션은 다음과 같은 응답 코드를 받습니다.
HTTP/1.1 504 Gateway Time-out
cURL 또는 웹브라우저를 사용하여 이러한 프록시를 호출하면 다음과 같은 오류가 발생할 수 있습니다.
<!DOCTYPE html> <html> <head> <title>Error</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>An error occurred.</h1> <p>Sorry, the page you are looking for is currently unavailable.<br/> Please try again later.</p> </body> </html>
시간 초과의 원인은 무엇인가요?
Edge 플랫폼을 통한 API 요청의 일반적인 경로는 클라이언트 > 라우터 > 메시지 프로세서 > Backend Server를 사용해야 합니다.
클라이언트, 라우터, 메시지 등 Apigee Edge 런타임 흐름의 모든 구성요소
프로세서와 백엔드 서버는 적절한 기본 제한 시간 값으로 설정되어
API 요청을 완료하는 데 너무 오래 걸리지 않도록 합니다. 만약
흐름이
시간 제한 구성의 경우 특정 구성요소의 시간이 초과되고 일반적으로
504 Gateway Timeout
오류가 발생했습니다.
이 플레이북에서는 다음과 같은 경우에 발생하는 504
오류 문제를 해결하는 방법을 설명합니다.
라우터가 시간 초과됩니다.
라우터 시간 초과
Apigee Edge의 라우터에 구성된 기본 제한 시간은 57초입니다. 이 값은 최대 Edge에서 API 요청이 수신된 시간부터 API 프록시가 실행될 수 있는 시간입니다. 백엔드 응답과 실행된 모든 정책을 포함하여 응답이 다시 전송됩니다. 기본 제한 시간은 다음에서 설명한 대로 라우터/가상 호스트에서 재정의할 수 있습니다. <ph type="x-smartling-placeholder"></ph> 라우터에서 I/O 제한 시간 구성을 참조하세요.
가능한 원인
Edge에서 504 Gateway Timeout
오류의 일반적인 원인은
라우터 타임아웃은 다음과 같습니다.
원인 | 설명 | 다음에 관한 문제 해결 안내 |
---|---|---|
라우터의 시간 제한 구성이 잘못됨 | 이 문제는 라우터의 I/O 제한 시간이 잘못 구성된 경우에 발생합니다. | 에지 퍼블릭 및 프라이빗 클라우드 사용자 |
일반적인 진단 단계
다음 도구/기술 중 하나를 사용하여 이 오류를 진단합니다.
- API 모니터링
- NGINX 액세스 로그
API 모니터링을 사용하여 오류를 진단하려면 다음 안내를 따르세요.
- 분석 > API 모니터링 > 조사 페이지를 엽니다.
- 오류
5xx
개를 필터링하고 기간을 선택하세요. - 시간을 기준으로 상태 코드를 표시합니다.
-
자세한 내용과 내용을 보려면 오류
504
개가 표시된 셀을 클릭하세요. 이러한 오류에 대한 로그가 아래에 표시됩니다.504 오류를 보여주는 예
- 오른쪽 창에서 로그 보기를 클릭합니다.
트래픽 로그 창에서 일부
504
오류에 대한 다음 세부정보를 확인합니다.- 요청: 호출하는 데 사용되는 요청 메서드와 URI를 제공합니다.
- 응답 시간: 요청에 대해 경과된 총 시간을 제공합니다.
위의 예에서
- 요청 이
GET /test-timeout
를 가리킵니다. - 응답 시간 은
57.001
초입니다. 이것은 라우터가 값이 매우 가까우므로 메시지 프로세서가 다시 응답할 수 있기 전에 시간이 초과되었습니다. 라우터에 설정된 기본 I/O 시간 제한인 57로 합니다
API Monitoring API를 사용하여 모든 로그를 GET logs API를 사용합니다. 예를 들어
org
,env
,timeRange
의 로그를 쿼리하면status
를 사용하면 클라이언트 시간이 초과되었습니다API Monitoring에서 이러한
504
의 프록시를-
(not set)으로 설정하므로 API (로그 API)를 사용하여 가상 호스트 및 경로의 관련 프록시를 가져옵니다.For example :
드림 <ph type="x-smartling-placeholder">curl "https://apimonitoring.enterprise.apigee.com/logs/apiproxies?org=
ORG &env=ENV &select=https - 응답 시간에서 추가
504
오류를 검토하고 확인합니다. 응답 시간이 일관적인지 확인합니다 (라우터에 설정된 I/O 시간 제한 값). 57초)을504
합니다.
NGINX 액세스 로그를 사용하여 오류를 진단하려면 다음 안내를 따르세요.
- NGINX 액세스 로그를 확인합니다.
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- 특정 기간 동안 오류
504
개가 있는지 검색하세요. (과거에 문제가 발생한 경우) 또는 여전히504
- 일부
504
오류의 경우 다음 정보를 참고하세요. <ph type="x-smartling-placeholder">- </ph>
- 응답 시간
- 요청 URI
이 예에서는 다음 정보가 표시됩니다.
-
요청 시간:
<ph type="x-smartling-placeholder">57.001
초 이는 57.001초 후에 라우터 시간이 초과되었습니다. - 요청:
GET /test-timeout
- 호스트 별칭:
myorg-test.apigee.net
-
Request Time(요청 시간)이 I/O 제한 시간과 동일한지 확인합니다. 라우터/가상 호스트에 설정되어 있습니다. 답이 '예'인 경우 컴퓨터가 시작하기 전에 라우터가 메시지 프로세서가 이 기간 내에 응답하지 않았습니다.
위에 표시된 NGINX 액세스 로그 항목 예에서 요청은 시간(
57.001
초)이 설정된 기본 I/O 제한 시간과 매우 가깝습니다. 에 있습니다. 이는 메시지 전송 전에 라우터가 타임아웃되었음을 나타냅니다. 프로세서가 응답할 수 있습니다. - 요청 필드.
원인: 라우터의 시간 제한 구성이 잘못됨
진단
- 이전에 라우터가 타임아웃되었기 때문에
504
오류가 발생하는지 확인합니다. 메시지 프로세서가 응답할 수 있었습니다. 이 작업을 수행하려면 API 모니터링의 응답 시간/라우터의 요청 시간 (두 필드 모두) 은 동일한 정보를 나타내지만 다른 이름으로 호출됨)은 라우터/가상 호스트에 구성된 I/O 시간 제한 및 Fault Source, Fault 필드 API 모니터링 또는 NGINX 액세스를 사용하여 프록시 및 오류 코드가-
로 설정됩니다. 일반적인 진단 단계에 설명된 대로 로그를 확인합니다. -
라우터 또는 특정 가상 호스트에 구성된 I/O 시간 제한 값이 더 저렴합니다.
이 섹션의 단계를 따르면 됩니다.
가상 호스트의 I/O 시간 제한 확인
<ph type="x-smartling-placeholder">Edge UI를 사용하여 가상 호스트 시간 제한을 확인하려면 다음 안내를 따르세요.
- Edge UI에 로그인합니다.
- 관리 > 가상 호스트로 이동합니다.
- 시간 초과 문제가 발생한 특정 환경을 선택합니다.
- I/O 제한 시간 값을 확인할 특정 가상 호스트를 선택합니다.
- 속성에서 프록시 읽기 시간 제한 값(초)을 확인합니다.
위 예에서 프록시 읽기 시간 제한 은
120
입니다. 즉, 이 가상 호스트에 구성된 I/O 제한 시간이 120초입니다.
또한 다음 관리 API를 사용하여 프록시 읽기 시간 제한을 확인할 수 있습니다.
-
다음을 실행합니다. <ph type="x-smartling-placeholder"></ph> 가상 호스트 API를 가져와서 아래와 같이
virtualhost
구성을 가져옵니다.퍼블릭 클라우드 사용자
curl -v -X GET https://api.enterprise.apigee.com/v1/organizations/
ORGANIZATION_NAME /environments/ENVIRONMENT_NAME /virtualhosts/VIRTUALHOST_NAME -uUSERNAME Private Cloud 사용자
curl -v -X GET http://
MANAGEMENT_SERVER_HOST :PORT# /v1/organizations/ORGANIZATION_NAME /environments/v/virtualhosts/VIRTUALHOST_NAME -uUSERNAME 각 항목의 의미는 다음과 같습니다.
ORGANIZATION_NAME는 조직의 이름입니다.
ENVIRONMENT_NAME은 환경 이름입니다.
VIRTUALHOST_NAME은 가상 호스트의 이름입니다.
-
proxy_read_timeout
속성에 구성된 값을 확인하세요.가상 호스트 샘플 정의
{ "hostAliases": [ "api.myCompany,com", ], "interfaces": [], "listenOptions": [], "name": "secure", "port": "443", "retryOptions": [], "properties": { "property": [ { "name": "proxy_read_timeout", "value": "120" } ] }, "sSLInfo": { "ciphers": [], "clientAuthEnabled": "false", "enabled": "true", "ignoreValidationErrors": false, "keyAlias": "myCompanyKeyAlias", "keyStore": "ref://myCompanyKeystoreref", "protocols": [] }, "useBuiltInFreeTrialCert": false }
위의 예에서
proxy_read_timeout
는120
입니다. 즉, 이 가상 호스트에 구성된 I/O 제한 시간이 120입니다. 초입니다.
Router.properties 파일에서 I/O 제한 시간 확인
<ph type="x-smartling-placeholder">- 라우터 머신에 로그인합니다.
- 다음에서 속성
proxy_read_timeout
검색:/opt/nginx/conf.d
디렉터리에서 새 값으로 설정되었는지 확인합니다. 방법은 다음과 같습니다.grep -ri "proxy_read_timeout" /opt/nginx/conf.d
-
특정 가상 머신에서
proxy_read_timeout
속성에 설정된 값을 확인합니다. 호스트 구성 파일에 있습니다.grep 명령어의 결과 샘플
/opt/nginx/conf.d/0-default.conf:proxy_read_timeout 57; /opt/nginx/conf.d/0-edge-health.conf:proxy_read_timeout 1s;
위의 출력 예에서
proxy_read_timeout
속성은 새 값인57
로 설정된0-default.conf
의 구성 파일을 제공합니다. 이는 I/O 제한 시간이 라우터에서 기본 가상 호스트의 경우 57초로 구성됩니다. 만약 여러 개의 가상 호스트라면 각각에 대해 이 정보가 표시됩니다. 다음 값을 가져옵니다.proxy_read_timeout
: API를 만드는 데 사용한 특정 가상 호스트504
개 오류와 함께 실패한 호출 수를 확인할 수 있습니다.
API 프록시에서 I/O 제한 시간 확인
다음에서 I/O 제한 시간을 확인할 수 있습니다.
- API 프록시의 대상 엔드포인트
- API 프록시의 Service콜아웃 정책
API 프록시의 대상 엔드포인트에서 I/O 제한 시간 보기
- Edge UI에서 I/O를 보려는 특정 API 프록시를 선택합니다. 제한 시간 값입니다.
- 확인할 특정 대상 엔드포인트를 선택합니다.
- 다음에서 적절한 값이 있는
io.timeout.millis
속성을 참조하세요.TargetEndpoint
의<HTTPTargetConnection>
요소 구성할 수 있습니다예를 들어 다음 코드의 I/O 제한 시간은 120초로 설정되어 있습니다.
<Properties> <Property name="io.timeout.millis">120000</Property> </Properties>
API 프록시의 Service콜아웃 정책에서 I/O 제한 시간 보기
- Edge UI에서 새 I/O를 보려는 특정 API 프록시를 선택합니다. Service콜아웃 정책의 제한 시간 값입니다.
- 확인할 특정 Service콜아웃 정책을 선택합니다.
-
아래의 적절한 값이 있는
<Timeout>
요소를 참고하세요.<ServiceCallout>
구성.예를 들어 다음 코드의 I/O 제한 시간은 120초입니다.
<Timeout>120000</Timeout>
메시지 프로세서의 I/O 제한 시간 확인
<ph type="x-smartling-placeholder">- 메시지 프로세서 머신에 로그인합니다.
-
다음에서 속성
HTTPTransport.io.timeout.millis
검색:/opt/apigee/edge-message-processor/conf
디렉터리를 생성합니다.grep -ri "HTTPTransport.io.timeout.millis" /opt/apigee/edge-message-processor/conf
샘플 출력
/opt/apigee/edge-message-processor/conf/http.properties:HTTPTransport.io.timeout.millis=55000
- 위의 예시 출력에서 속성이
HTTPTransport.io.timeout.millis
이(가)55000
값으로 설정되었습니다.http.properties
입니다. 이는 I/O 제한 시간이 성공적으로 구성되었음을 나타냅니다. 메시지 프로세서에서 55초
라우터와 메시지 프로세서에 구성된 시간 제한을 확인했으면 라우터/가상 호스트의 제한 시간 값이 메시지 프로세서/API 프록시입니다.
아래 표에 나와 있는 것처럼 모든 레이어에 설정된 값을 기록해 둡니다.
라우터 시간 초과 (초) | 가상 호스트 제한 시간 (초) | 메시지 프로세서 시간 제한 (초) | API 프록시 제한 시간 (초) |
---|---|---|---|
57 | - | 55 | 120 |
이 예시에서 보면,
- 57초의 기본값은 라우터에서 구성됩니다.
- 특정 가상 호스트에 제한 시간 값이 설정되어 있지 않습니다. 즉, 57초의 기본값이 라우터 자체에 구성되어 있습니다.
- 메시지 프로세서에서 기본값 55초가 구성됩니다.
- 하지만 특정 API 프록시에서는 값이 120초로 구성됩니다.
더 높은 제한 시간 값은 API 프록시에서만 구성되지만 라우터는 여전히
57초로 구성됩니다 따라서 라우터는 메시지가 전송되는 동안 57초에
프로세서/백엔드에서 아직 요청을 처리하는 중입니다. 이렇게 하면 라우터가
504 Gateway Timeout
오류를 클라이언트 애플리케이션에 전송합니다.
해상도
라우터 및 메시지에 적절한 I/O 시간 제한을 구성하려면 다음 단계를 따르세요. 이 문제를 해결할 대행업체입니다.
- 다음을 참고하세요. <ph type="x-smartling-placeholder"></ph> 제한 시간 값을 파악하기 위한 I/O 제한 시간 구성 권장사항 Apigee Edge를 통한 API 요청 흐름과 관련된 여러 구성요소에 설정해야 합니다.
- 위의 예에서 더 높은 제한 시간 값을 설정해야 하는 경우
백엔드 서버의 시간이 더 오래 걸리고 제한 시간을 늘렸기 때문입니다.
값을 120초로 설정한 다음, 시간 제한 값을 더 높게
예: 라우터의
123 seconds
. 모든 API 프록시에 영향을 주지 않는 방법 새로운 제한 시간 값으로 인해123 seconds
값을 특정 가상 호스트가 사용됩니다. - 다음의 지침을 따르세요. <ph type="x-smartling-placeholder"></ph> 라우터에서 I/O 제한 시간 구성을 참조하여 가상 호스트의 제한 시간 설정