503 서비스를 사용할 수 없음 - 403 오류 발생 시 프록시 터널 생성 실패

<ph type="x-smartling-placeholder"></ph> 현재 Apigee Edge 문서를 보고 있습니다.
Apigee X 문서.
정보

증상

클라이언트 애플리케이션이 HTTP 상태 코드 503 Service Unavailable를 가져옵니다. API 호출에 대한 응답으로 protocol.http.ProxyTunnelCreationFailed 오류 코드를 표시합니다.

오류 메시지

클라이언트 애플리케이션은 다음과 같은 응답 코드를 받습니다.

HTTP/1.1 503 Service Unavailable

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

{
   "fault":{
      "faultstring":"Proxy refused to create tunnel with response status 403",
      "detail":{
         "errorcode":"protocol.http.ProxyTunnelCreationFailed"
      }
   }
}

정방향 프록시 및 터널링

Apigee Edge를 사용하면 API 프록시가 프록시를 통해 백엔드 서버와 통신할 수 있습니다. 자세한 내용은 <ph type="x-smartling-placeholder"></ph> 정방향 프록시를 구성합니다. 프록시 서버가 보안 서버 (HTTPS) 또는 비보안 서버를 엽니다. 프록시 유형(표시됨)에 따라 백엔드 서버에 대한 (HTTP) 연결 HTTPClient.proxy.type) 속성을 사용하여 데이터를 전송합니다. 두 방향으로 갈 수 있습니다. 이를 터널링이라고 합니다.

기본적으로 Apigee Edge는 모든 트래픽에 터널링을 사용합니다. 터널링을 중지하려면 속성이 HTTPClient.use.tunnelingfalse로 설정해야 합니다.

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

오류 코드: Protocol.http.ProxyTunnelCreationFailed

다음과 같은 경우 Apigee Edge는 오류 코드 protocol.http.ProxyTunnelCreationFailed를 반환합니다. 프록시 서버에서 다음과 같은 이유로 Apigee Edge와 백엔드 서버 간에 터널을 만들 수 없습니다. 방화벽, ACL (액세스 제어 목록) 제한, DNS 문제, 백엔드 서버 등의 문제 비가용성, 시간 초과 등

Apigee Edge 응답의 faultstring에 있는 상태 코드는 일반적으로 는 이 오류를 야기했을 수 있는 높은 수준의 원인을 나타냅니다.

오류 문자열 템플릿:

Proxy refused to create tunnel with response status STATUS_CODE

faultstring에서 관찰된 일부 상태 코드의 가능한 원인은 다음과 같습니다.

다음 표에서는 faultstring:

오류 문자열 설명
프록시가 응답 상태가 403인 터널 생성을 거부함

403 - Forbidden

이 문제는 네트워크 서버에 구성된 방화벽이나 ACL 제한 사항으로 인해 터널 생성을 방지하는 백엔드 서버입니다.

프록시가 응답 상태가 503인 터널 생성을 거부함

503 - Service Unavailable

이는 DNS 문제, 방화벽 제한, 백엔드 서버의 터널 생성을 방지하는 비가용성

프록시가 응답 상태가 504인 터널 생성을 거부함

504 - Gateway Timeout

터널 생성 중에 시간 초과가 발생하면 이 문제가 발생할 수 있습니다.

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

faultstring에서 관찰된 상태 코드에 따라 다음을 사용해야 합니다. 적절한 기술을 사용할 수 있습니다. 이 플레이북에서는 faultstring에서 상태 코드 403 가 표시되는 경우 문제 오류 코드 protocol.http.ProxyTunnelCreationFailed

가능한 원인

이 오류 (상태 코드 403)는 방화벽이나 ACL (Access)이 있는 경우 발생합니다. 터널 작동을 막는 백엔드 서버에 구성된 제한사항 프록시 서버에 의해 Apigee Edge와 백엔드 서버 간에 생성됩니다.

<ph type="x-smartling-placeholder">
원인 설명 다음에 관한 문제 해결 안내
프록시가 응답 상태 403으로 터널 생성을 거부함 프록시 서버가 프록시 서버 호스트 이름을 수신하므로 터널 생성을 거부합니다. Host 헤더에 백엔드 서버 호스트 이름 대신 사용합니다. Edge 프라이빗 클라우드 사용자만 해당

일반적인 진단 단계

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

추적 도구

Trace 도구를 사용하여 오류를 진단하는 방법은 다음과 같습니다.

  1. 추적 세션을 사용 설정합니다. 다음 중 하나를 수행합니다. <ph type="x-smartling-placeholder">
      </ph>
    • 오류가 발생할 때까지 기다립니다.
    • 문제를 재현할 수 있는 경우 API를 호출하여 문제를 재현합니다. 503 Service Unavailable Proxy refused to create tunnel with response status 403와 함께 사용
  2. 모든 FlowInfos 표시가 사용 설정되어 있는지 확인합니다.

  3. 실패한 요청 중 하나를 선택하고 trace를 검토합니다.
  4. 추적의 여러 단계를 살펴보고 장애가 발생한 위치 찾기 수 있습니다.
  5. 이 오류는 일반적으로 Target Request Flow Started(대상 요청 흐름 시작됨) 단계 다음에 표시됩니다. 다음과 같습니다.

    다음 정보를 참고하세요.

    오류: Proxy refused to create tunnel with response status 403

  6. 트레이스의 AX (애널리틱스 데이터 기록됨) 단계로 이동하여 클릭합니다.
  7. 아래로 스크롤하여 단계 세부정보 응답 헤더 섹션으로 이동한 다음 X-Apigee-fault-codeX-Apigee-fault-source의 값을 다음과 같이 결정합니다. 다음과 같습니다.

    ( 더 크게 보기)

    ( 더 크게 보기)

  8. X-Apigee-fault-codeX-Apigee-fault-source의 값이 표시됩니다. protocol.http.ProxyTunnelCreationFailedtarget 로 표시됩니다. 이는 프록시 터널이 터널링되지 않아 이 오류가 발생했음을 나타냅니다. 예상 호스트 헤더가 수신되지 않아 만들 수 없습니다.

    응답 헤더
    X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
    X-Apigee-fault-source target

NGINX

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

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

  1. Private Cloud 사용자인 경우 NGINX 액세스 로그를 사용하여 HTTP 503 Service Unavailable에 대한 주요 정보 확인 오류가 발생했습니다.
  2. NGINX 액세스 로그를 확인합니다.

    /opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log

    위치: ORG, ORG, PORT#는 실제 값으로 대체됩니다.

  3. 오류 코드와 함께 503 오류가 있는지 검색하여 확인합니다. 특정 기간 동안 protocol.http.ProxyTunnelCreationFailed( 또는 여전히 실패하고 있는 요청이 있는지 503
  4. X-Apigee-fault-code에서 503 오류가 발견된 경우 protocol.http.ProxyTunnelCreationFailed의 값과 일치하는 경우 그런 다음 X-Apigee-fault-source.의 값을 결정합니다.

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

    NGINX 액세스 로그의 위 샘플 항목에는 X- Apigee-fault-codeX-Apigee-fault-source:

    응답 헤더
    X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
    X-Apigee-fault-source target

원인: 프록시가 응답 상태가 403인 터널 생성을 거부함

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

진단

  1. 다음 페이지에 설명된 대로 Trace Tool 또는 NGINX 액세스 로그를 사용하여 503 Service Unavailable결함 코드오류 소스를 확인합니다. 일반적인 진단 단계.
  2. 오류 메시지를 검토하고 상태 코드를 확인합니다. 터널 생성 실패에 대해 faultstring에 표시됩니다.
  3. 이 시나리오에서 상태 코드는 403이며 Forbidden을 의미합니다.
  4. 이는 터널을 만들 수 있는 권한 또는 권한이 충분하지 않음을 의미합니다. 이로 인해 일반적으로 방화벽이나 ACL (액세스 제어 목록) 제한 사항이 터널 생성을 방지합니다
  5. 다음 조건에 따라 백엔드 서버에 구성된 방화벽 또는 ACL 제한사항을 터널 생성을 방지할 수 있습니다
  6. 방화벽 유형 또는 ACL 제한사항에 따라 문제를 해결해야 합니다. 적절하게 조정할 수 있습니다
  7. 방화벽 제한의 예시를 통해 문제를 해결하고 이 문제를 해결하는 방법을 설명해 보겠습니다. 문제:

    시나리오: 백엔드 서버의 방화벽 제한으로 인해 호스트 헤더가 항상 있어야 함 백엔드 서버 호스트 이름을 포함해야 합니다.

    다음 방법 중 하나를 사용하여 Apigee Edge에서 전달한 호스트 헤더를 확인할 수 있습니다.

    Trace

    Trace를 사용하여 호스트 헤더를 확인하려면 다음 안내를 따르세요.

    1. 다음에 설명된 대로 트레이스를 사용하여 faultstringProxy refused to create tunnel with response status 403가 포함되어 있는지 확인합니다. 일반적인 진단 단계.
    2. Target Request Flow Started(대상 요청 흐름 시작됨) 단계로 이동하고 요청 헤더
    3. 호스트 헤더에 지정된 호스트 이름 값을 요청 헤더 섹션을 참조하세요.
    4. 호스트 헤더에 프록시 호스트 이름이 포함된 경우 이 오류의 원인이 될 수 있습니다.
    5. 이는 방화벽이 호스트 헤더백엔드 서버의 이름이 포함된 경우에만 요청을 허용합니다.
    6. 따라서 프록시 서버가 백엔드 서버로 터널을 만들려고 하면 오류와 함께 실패

      Proxy refused to create tunnel with response status 403.

      호스트 헤더에 프록시 호스트 이름이 있는 것을 보여주는 샘플 트레이스

      ( 더 크게 보기)

      위에 표시된 샘플 트레이스에서는 호스트 헤더에 프록시 호스트의 이름입니다. www.proxyserver.com. 백엔드 서버에 구성된 방화벽 제한으로, 호스트 헤더에 포함할 백엔드 서버 호스트 이름을 지정하려면 오류 Proxy refused to create tunnel with response status 403.

    tcpdump

    tcpdump를 사용하여 호스트 헤더 확인

    1. 다음에서 들어오는 요청에 대해 프록시 서버에서 tcpdump를 캡처합니다. 다음 명령어를 사용한 Apigee Edge의 메시지 프로세서 구성요소:

      tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
      

      tcpdump 명령어 사용에 관한 자세한 내용은 <ph type="x-smartling-placeholder"></ph> tcpdump.

    2. 다음을 사용하여 tcpdump 데이터 분석: Wireshark 도구 또는 이와 유사한 도구 있습니다.
    3. 이 슬라이드에는 <ph type="x-smartling-placeholder"></ph> tcpdump에서 사용할 수 있습니다.

      ( 더 크게 보기)

    4. 패킷 번호 13, 14, 15는 메시지가 프로세서가 3방향 TCP를 통해 프록시 서버에 연결을 설정합니다. 핸드셰이크 프로세스를 사용할 수 있습니다.
    5. 패킷 16에서 메시지 프로세서가 프록시 호스트에 연결되었습니다. httpbin.org (위의 예시 참고)
    6. 패킷 16을 선택하고 패킷의 내용을 자세히 살펴봅니다. 구체적으로 메시지 서버에 의해 프록시 서버로 전달되는 호스트 헤더가 프로세서.

    7. 위의 샘플은 호스트 헤더 httpin.org를 보여줍니다. 는 프록시 서버의 호스트 이름입니다. 따라서 프록시 서버가 다음 호스트 헤더를 전달하여 백엔드 서버로 터널을 만듭니다. httpin.org이면 Proxy refused to create tunnel with response status 403 오류와 함께 실패합니다.

해상도

시나리오: 프록시 서버의 방화벽 제한으로 인해 호스트 헤더가 항상 백엔드 서버 호스트 이름 포함

백엔드 서버의 방화벽이 호스트 헤더에 항상 백엔드 서버가 포함되어야 하도록 구성 프록시 서버 호스트 이름을 보내고, 그 다음에 메시지 프로세서가 프록시 서버 호스트 이름을 다음 단계에 따라 문제를 해결하세요.

  1. 다음에서 속성 use.proxy.host.header.with.target.uri 를 true로 설정합니다. TargetEndpoint를 보여줍니다.

    샘플 TargetEndpoint 구성:

    <TargetEndpoint name="default">
      <HTTPTargetConnection>
        <URL>https://mocktarget.apigee.net/json</URL>
        <Properties>
          <Property name="use.proxy.host.header.with.target.uri">true</Property>
        </Properties>
      </HTTPTargetConnection>
    </TargetEndpoint>
    
    <ph type="x-smartling-placeholder">
  2. 다음과 관련된 다른 속성은 <ph type="x-smartling-placeholder"></ph> 전달 프록시는 메시지 프로세서에서 다음과 같이 구성됩니다.

    1. 각 메시지 프로세서에서 /opt/apigee/customer/application/message-processor.properties 파일을 검토합니다.
    2. 사용 사례 또는 요구사항에 따라 다음 속성이 설정되어 있는지 확인하세요.

      속성의 샘플 값:

      conf_http_HTTPClient.use.proxy=true
      conf/http.properties+HTTPClient.proxy.type=HTTP
      conf/http.properties+HTTPClient.proxy.host=PROXY_SERVER_HOST_NAME
      conf/http.properties+HTTPClient.proxy.port=PORT_#
      conf/http.properties+HTTPClient.proxy.user=USERNAME
      conf/http.properties+HTTPClient.proxy.password=PASSWORD
      
      <ph type="x-smartling-placeholder">

진단 정보 수집 필요

위의 안내를 따른 후에도 문제가 지속되면 다음을 수집합니다. Apigee Edge 지원팀에 문의하세요.

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

  • 실패한 요청에 대해 발견된 전체 오류 메시지
  • 환경 이름
  • API 프록시 번들
  • API 요청에 대한 추적 파일
  • 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
    

참조