504 게이트웨이 시간 초과 - 라우터 시간 초과

<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 오류 문제를 해결하는 방법을 설명합니다. 라우터가 시간 초과됩니다.

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

라우터 시간 초과

Apigee Edge의 라우터에 구성된 기본 제한 시간은 57초입니다. 이 값은 최대 Edge에서 API 요청이 수신된 시간부터 API 프록시가 실행될 수 있는 시간입니다. 백엔드 응답과 실행된 모든 정책을 포함하여 응답이 다시 전송됩니다. 기본 제한 시간은 다음에서 설명한 대로 라우터/가상 호스트에서 재정의할 수 있습니다. <ph type="x-smartling-placeholder"></ph> 라우터에서 I/O 제한 시간 구성을 참조하세요.

가능한 원인

Edge에서 504 Gateway Timeout 오류의 일반적인 원인은 라우터 타임아웃은 다음과 같습니다.

원인 설명 다음에 관한 문제 해결 안내
라우터의 시간 제한 구성이 잘못됨 이 문제는 라우터의 I/O 제한 시간이 잘못 구성된 경우에 발생합니다. 에지 퍼블릭 및 프라이빗 클라우드 사용자

일반적인 진단 단계

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

  • API 모니터링
  • NGINX 액세스 로그
<ph type="x-smartling-placeholder">

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

  1. 분석 > API 모니터링 > 조사 페이지를 엽니다.
  2. 오류 5xx개를 필터링하고 기간을 선택하세요.
  3. 시간을 기준으로 상태 코드를 표시합니다.
  4. 자세한 내용과 내용을 보려면 오류 504개가 표시된 셀을 클릭하세요. 이러한 오류에 대한 로그가 아래에 표시됩니다.

    504 오류를 보여주는 예

  5. 오른쪽 창에서 로그 보기를 클릭합니다.

    트래픽 로그 창에서 일부 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 :

    curl "https://apimonitoring.enterprise.apigee.com/logs/apiproxies?org=ORG&env=ENV&select=https
    
    드림 <ph type="x-smartling-placeholder">
  6. 응답 시간에서 추가 504 오류를 검토하고 확인합니다. 응답 시간이 일관적인지 확인합니다 (라우터에 설정된 I/O 시간 제한 값). 57초)을 504합니다.
<ph type="x-smartling-placeholder">

NGINX 액세스 로그를 사용하여 오류를 진단하려면 다음 안내를 따르세요.

  1. NGINX 액세스 로그를 확인합니다.
    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
  2. 특정 기간 동안 오류 504개가 있는지 검색하세요. (과거에 문제가 발생한 경우) 또는 여전히 504
  3. 일부 504 오류의 경우 다음 정보를 참고하세요. <ph type="x-smartling-placeholder">
      </ph>
    • 응답 시간
    • 요청 URI

    이 예에서는 다음 정보가 표시됩니다.

    • 요청 시간: 57.001초 이는 57.001초 후에 라우터 시간이 초과되었습니다.

      <ph type="x-smartling-placeholder">
    • 요청: GET /test-timeout
    • 호스트 별칭: myorg-test.apigee.net
  4. Request Time(요청 시간)이 I/O 제한 시간과 동일한지 확인합니다. 라우터/가상 호스트에 설정되어 있습니다. 답이 '예'인 경우 컴퓨터가 시작하기 전에 라우터가 메시지 프로세서가 이 기간 내에 응답하지 않았습니다.

    위에 표시된 NGINX 액세스 로그 항목 예에서 요청은 시간(57.001초)이 설정된 기본 I/O 제한 시간과 매우 가깝습니다. 에 있습니다. 이는 메시지 전송 전에 라우터가 타임아웃되었음을 나타냅니다. 프로세서가 응답할 수 있습니다.

  5. 요청 필드.

원인: 라우터의 시간 제한 구성이 잘못됨

진단

  1. 이전에 라우터가 타임아웃되었기 때문에 504 오류가 발생하는지 확인합니다. 메시지 프로세서가 응답할 수 있었습니다. 이 작업을 수행하려면 API 모니터링의 응답 시간/라우터의 요청 시간 (두 필드 모두) 은 동일한 정보를 나타내지만 다른 이름으로 호출됨)은 라우터/가상 호스트에 구성된 I/O 시간 제한 및 Fault Source, Fault 필드 API 모니터링 또는 NGINX 액세스를 사용하여 프록시오류 코드-로 설정됩니다. 일반적인 진단 단계에 설명된 대로 로그를 확인합니다.
  2. 라우터 또는 특정 가상 호스트에 구성된 I/O 시간 제한 값이 더 저렴합니다.

    이 섹션의 단계를 따르면 됩니다.

가상 호스트의 I/O 시간 제한 확인

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

Edge UI를 사용하여 가상 호스트 시간 제한을 확인하려면 다음 안내를 따르세요.

  1. Edge UI에 로그인합니다.
  2. 관리 > 가상 호스트로 이동합니다.
  3. 시간 초과 문제가 발생한 특정 환경을 선택합니다.
  4. I/O 제한 시간 값을 확인할 특정 가상 호스트를 선택합니다.
  5. 속성에서 프록시 읽기 시간 제한 값(초)을 확인합니다.

    위 예에서 프록시 읽기 시간 제한 120입니다. 즉, 이 가상 호스트에 구성된 I/O 제한 시간이 120초입니다.

또한 다음 관리 API를 사용하여 프록시 읽기 시간 제한을 확인할 수 있습니다.

  1. 다음을 실행합니다. <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 -u USERNAME
    

    Private Cloud 사용자

    curl -v -X GET http://MANAGEMENT_SERVER_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/v/virtualhosts/VIRTUALHOST_NAME -u USERNAME
    

    각 항목의 의미는 다음과 같습니다.

    ORGANIZATION_NAME는 조직의 이름입니다.

    ENVIRONMENT_NAME은 환경 이름입니다.

    VIRTUALHOST_NAME은 가상 호스트의 이름입니다.

  2. 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_timeout120입니다. 즉, 이 가상 호스트에 구성된 I/O 제한 시간이 120입니다. 초입니다.

를 통해 개인정보처리방침을 정의할 수 있습니다.

Router.properties 파일에서 I/O 제한 시간 확인

<ph type="x-smartling-placeholder">
  1. 라우터 머신에 로그인합니다.
  2. 다음에서 속성 proxy_read_timeout 검색: /opt/nginx/conf.d 디렉터리에서 새 값으로 설정되었는지 확인합니다. 방법은 다음과 같습니다.
    grep -ri "proxy_read_timeout" /opt/nginx/conf.d
    
  3. 특정 가상 머신에서 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 제한 시간 보기
  1. Edge UI에서 I/O를 보려는 특정 API 프록시를 선택합니다. 제한 시간 값입니다.
  2. 확인할 특정 대상 엔드포인트를 선택합니다.
  3. 다음에서 적절한 값이 있는 io.timeout.millis 속성을 참조하세요. TargetEndpoint<HTTPTargetConnection> 요소 구성할 수 있습니다

    예를 들어 다음 코드의 I/O 제한 시간은 120초로 설정되어 있습니다.

    <Properties>
      <Property name="io.timeout.millis">120000</Property>
    </Properties>
    
API 프록시의 Service콜아웃 정책에서 I/O 제한 시간 보기
  1. Edge UI에서 새 I/O를 보려는 특정 API 프록시를 선택합니다. Service콜아웃 정책의 제한 시간 값입니다.
  2. 확인할 특정 Service콜아웃 정책을 선택합니다.
  3. 아래의 적절한 값이 있는 <Timeout> 요소를 참고하세요. <ServiceCallout> 구성.

    예를 들어 다음 코드의 I/O 제한 시간은 120초입니다.

    <Timeout>120000</Timeout>
    

메시지 프로세서의 I/O 제한 시간 확인

<ph type="x-smartling-placeholder">
  1. 메시지 프로세서 머신에 로그인합니다.
  2. 다음에서 속성 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
    
  3. 위의 예시 출력에서 속성이 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 시간 제한을 구성하려면 다음 단계를 따르세요. 이 문제를 해결할 대행업체입니다.

  1. 다음을 참고하세요. <ph type="x-smartling-placeholder"></ph> 제한 시간 값을 파악하기 위한 I/O 제한 시간 구성 권장사항 Apigee Edge를 통한 API 요청 흐름과 관련된 여러 구성요소에 설정해야 합니다.
  2. 위의 예에서 더 높은 제한 시간 값을 설정해야 하는 경우 백엔드 서버의 시간이 더 오래 걸리고 제한 시간을 늘렸기 때문입니다. 값을 120초로 설정한 다음, 시간 제한 값을 더 높게 예: 라우터의 123 seconds. 모든 API 프록시에 영향을 주지 않는 방법 새로운 제한 시간 값으로 인해 123 seconds 값을 특정 가상 호스트가 사용됩니다.
  3. 다음의 지침을 따르세요. <ph type="x-smartling-placeholder"></ph> 라우터에서 I/O 제한 시간 구성을 참조하여 가상 호스트의 제한 시간 설정