<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.tunneling
는 false
로 설정해야 합니다.
오류 코드: 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 인 터널 생성을 거부함 |
이 문제는 네트워크 서버에 구성된 방화벽이나 ACL 제한 사항으로 인해 터널 생성을 방지하는 백엔드 서버입니다. |
프록시가 응답 상태가 503 인 터널 생성을 거부함 |
이는 DNS 문제, 방화벽 제한, 백엔드 서버의 터널 생성을 방지하는 비가용성 |
프록시가 응답 상태가 504인 터널 생성을 거부함 |
터널 생성 중에 시간 초과가 발생하면 이 문제가 발생할 수 있습니다. |
faultstring
에서 관찰된 상태 코드에 따라 다음을 사용해야 합니다.
적절한 기술을 사용할 수 있습니다. 이 플레이북에서는
faultstring
에서 상태 코드 403
가 표시되는 경우 문제
오류 코드 protocol.http.ProxyTunnelCreationFailed
가능한 원인
이 오류 (상태 코드 403
)는 방화벽이나 ACL (Access)이 있는 경우 발생합니다.
터널 작동을 막는 백엔드 서버에 구성된 제한사항
프록시 서버에 의해 Apigee Edge와 백엔드 서버 간에 생성됩니다.
원인 | 설명 | 다음에 관한 문제 해결 안내 |
---|---|---|
프록시가 응답 상태 403으로 터널 생성을 거부함 | 프록시 서버가 프록시 서버 호스트 이름을 수신하므로 터널 생성을 거부합니다.
Host 헤더에 백엔드 서버 호스트 이름 대신 사용합니다. |
Edge 프라이빗 클라우드 사용자만 해당 |
일반적인 진단 단계
다음 도구/기술 중 하나를 사용하여 이 오류를 진단합니다.
추적 도구
Trace 도구를 사용하여 오류를 진단하는 방법은 다음과 같습니다.
- 추적 세션을 사용 설정합니다.
다음 중 하나를 수행합니다.
<ph type="x-smartling-placeholder">
- </ph>
- 오류가 발생할 때까지 기다립니다.
- 문제를 재현할 수 있는 경우 API를 호출하여 문제를 재현합니다.
503 Service Unavailable
Proxy refused to create tunnel with response status 403
와 함께 사용
모든 FlowInfos 표시가 사용 설정되어 있는지 확인합니다.
- 실패한 요청 중 하나를 선택하고 trace를 검토합니다.
- 추적의 여러 단계를 살펴보고 장애가 발생한 위치 찾기 수 있습니다.
이 오류는 일반적으로 Target Request Flow Started(대상 요청 흐름 시작됨) 단계 다음에 표시됩니다. 다음과 같습니다.
다음 정보를 참고하세요.
오류:
Proxy refused to create tunnel with response status 403
- 트레이스의 AX (애널리틱스 데이터 기록됨) 단계로 이동하여 클릭합니다.
아래로 스크롤하여 단계 세부정보 응답 헤더 섹션으로 이동한 다음 X-Apigee-fault-code와 X-Apigee-fault-source의 값을 다음과 같이 결정합니다. 다음과 같습니다.
( 더 크게 보기)
( 더 크게 보기)
X-Apigee-fault-code와 X-Apigee-fault-source의 값이 표시됩니다.
protocol.http.ProxyTunnelCreationFailed
및target
로 표시됩니다. 이는 프록시 터널이 터널링되지 않아 이 오류가 발생했음을 나타냅니다. 예상 호스트 헤더가 수신되지 않아 만들 수 없습니다.응답 헤더 값 X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
X-Apigee-fault-source target
NGINX
<ph type="x-smartling-placeholder">NGINX 액세스 로그를 사용하여 오류를 진단하려면 다음 안내를 따르세요.
- Private Cloud 사용자인 경우 NGINX 액세스 로그를 사용하여
HTTP
503 Service Unavailable
에 대한 주요 정보 확인 오류가 발생했습니다. NGINX 액세스 로그를 확인합니다.
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
위치: ORG, ORG, PORT#는 실제 값으로 대체됩니다.
- 오류 코드와 함께
503
오류가 있는지 검색하여 확인합니다. 특정 기간 동안protocol.http.ProxyTunnelCreationFailed
( 또는 여전히 실패하고 있는 요청이 있는지503
X-Apigee-fault-code에서
503
오류가 발견된 경우protocol.http.ProxyTunnelCreationFailed
의 값과 일치하는 경우 그런 다음 X-Apigee-fault-source.의 값을 결정합니다.NGINX 액세스 로그의 샘플 503 오류:
NGINX 액세스 로그의 위 샘플 항목에는 X- Apigee-fault-code 및 X-Apigee-fault-source:
응답 헤더 값 X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
X-Apigee-fault-source target
원인: 프록시가 응답 상태가 403인 터널 생성을 거부함
<ph type="x-smartling-placeholder">진단
- 다음 페이지에 설명된 대로 Trace Tool 또는 NGINX 액세스 로그를 사용하여
503 Service Unavailable
의 결함 코드와 오류 소스를 확인합니다. 일반적인 진단 단계. - 오류 메시지를 검토하고 상태 코드를 확인합니다.
터널 생성 실패에 대해
faultstring
에 표시됩니다. - 이 시나리오에서 상태 코드는
403
이며 Forbidden을 의미합니다. - 이는 터널을 만들 수 있는 권한 또는 권한이 충분하지 않음을 의미합니다. 이로 인해 일반적으로 방화벽이나 ACL (액세스 제어 목록) 제한 사항이 터널 생성을 방지합니다
- 다음 조건에 따라 백엔드 서버에 구성된 방화벽 또는 ACL 제한사항을 터널 생성을 방지할 수 있습니다
- 방화벽 유형 또는 ACL 제한사항에 따라 문제를 해결해야 합니다. 적절하게 조정할 수 있습니다
방화벽 제한의 예시를 통해 문제를 해결하고 이 문제를 해결하는 방법을 설명해 보겠습니다. 문제:
시나리오: 백엔드 서버의 방화벽 제한으로 인해 호스트 헤더가 항상 있어야 함 백엔드 서버 호스트 이름을 포함해야 합니다.
다음 방법 중 하나를 사용하여 Apigee Edge에서 전달한 호스트 헤더를 확인할 수 있습니다.
Trace
Trace를 사용하여 호스트 헤더를 확인하려면 다음 안내를 따르세요.
- 다음에 설명된 대로 트레이스를 사용하여
faultstring
에Proxy refused to create tunnel with response status 403
가 포함되어 있는지 확인합니다. 일반적인 진단 단계. - Target Request Flow Started(대상 요청 흐름 시작됨) 단계로 이동하고 요청 헤더
- 호스트 헤더에 지정된 호스트 이름 값을 요청 헤더 섹션을 참조하세요.
- 호스트 헤더에 프록시 호스트 이름이 포함된 경우 이 오류의 원인이 될 수 있습니다.
- 이는 방화벽이 호스트 헤더에 백엔드 서버의 이름이 포함된 경우에만 요청을 허용합니다.
- 따라서 프록시 서버가 백엔드 서버로 터널을 만들려고 하면
오류와 함께 실패
Proxy refused to create tunnel with response status 403
.호스트 헤더에 프록시 호스트 이름이 있는 것을 보여주는 샘플 트레이스
( 더 크게 보기)
위에 표시된 샘플 트레이스에서는 호스트 헤더에 프록시 호스트의 이름입니다.
www.proxyserver.com.
백엔드 서버에 구성된 방화벽 제한으로, 호스트 헤더에 포함할 백엔드 서버 호스트 이름을 지정하려면 오류Proxy refused to create tunnel with response status 403
.
tcpdump
tcpdump를 사용하여 호스트 헤더 확인
다음에서 들어오는 요청에 대해 프록시 서버에서
tcpdump
를 캡처합니다. 다음 명령어를 사용한 Apigee Edge의 메시지 프로세서 구성요소:tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
tcpdump
명령어 사용에 관한 자세한 내용은 <ph type="x-smartling-placeholder"></ph> tcpdump.- 다음을 사용하여
tcpdump
데이터 분석: Wireshark 도구 또는 이와 유사한 도구 있습니다. 이 슬라이드에는 <ph type="x-smartling-placeholder"></ph> tcpdump에서 사용할 수 있습니다.
( 더 크게 보기)
- 패킷 번호 13, 14, 15는 메시지가 프로세서가 3방향 TCP를 통해 프록시 서버에 연결을 설정합니다. 핸드셰이크 프로세스를 사용할 수 있습니다.
- 패킷 16에서 메시지 프로세서가 프록시 호스트에 연결되었습니다.
httpbin.org
(위의 예시 참고) 패킷 16을 선택하고 패킷의 내용을 자세히 살펴봅니다. 구체적으로 메시지 서버에 의해 프록시 서버로 전달되는 호스트 헤더가 프로세서.
- 위의 샘플은 호스트 헤더
httpin.org
를 보여줍니다. 는 프록시 서버의 호스트 이름입니다. 따라서 프록시 서버가 다음 호스트 헤더를 전달하여 백엔드 서버로 터널을 만듭니다.httpin.org
이면Proxy refused to create tunnel with response status 403
오류와 함께 실패합니다.
- 다음에 설명된 대로 트레이스를 사용하여
해상도
시나리오: 프록시 서버의 방화벽 제한으로 인해 호스트 헤더가 항상 백엔드 서버 호스트 이름 포함
백엔드 서버의 방화벽이 호스트 헤더에 항상 백엔드 서버가 포함되어야 하도록 구성 프록시 서버 호스트 이름을 보내고, 그 다음에 메시지 프로세서가 프록시 서버 호스트 이름을 다음 단계에 따라 문제를 해결하세요.
다음에서 속성
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">다음과 관련된 다른 속성은 <ph type="x-smartling-placeholder"></ph> 전달 프록시는 메시지 프로세서에서 다음과 같이 구성됩니다.
- 각 메시지 프로세서에서
/opt/apigee/customer/application/message-processor.properties
파일을 검토합니다. 사용 사례 또는 요구사항에 따라 다음 속성이 설정되어 있는지 확인하세요.
속성의 샘플 값:
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
참조
- <ph type="x-smartling-placeholder"></ph> 정방향 프록시 구성하기
- <ph type="x-smartling-placeholder"></ph> SSL 터널링