<ph type="x-smartling-placeholder"></ph>
현재 Apigee Edge 문서를 보고 있습니다.
Apigee X 문서. 정보
증상
클라이언트 애플리케이션은 API 호출에 대한 응답으로 Not
Found
메시지 및 Unable to identify proxy for host: VIRTUAL_HOST and
url: PATH
오류 메시지와 함께 404
의 HTTP 상태 코드를 가져옵니다.
이 오류는 Edge에서 지정된 가상 호스트 및 경로의 API 프록시를 찾을 수 없음을 의미합니다.
오류 메시지
클라이언트 애플리케이션이 다음과 같은 응답 코드를 받습니다.
HTTP/1.1 404 Not Found
또한 아래와 유사한 오류 메시지가 표시될 수도 있습니다.
{ "fault":{ "faultstring":"Unable to identify proxy for host: default and url: \/oauth2\/token", "detail":{ "errorcode":"messaging.adaptors.http.flow.ApplicationNotFound" } } }
가능한 원인
원인 | 설명 | 다음에 관한 문제 해결 안내 |
---|---|---|
중복된 호스트 별칭을 사용하는 가상 호스트 | 여러 가상 호스트는 호스트 별칭과 포트 번호가 동일합니다. | 에지 퍼블릭 및 프라이빗 클라우드 사용자 |
일반적인 진단 단계
NGINX 및 메시지 프로세서 로그는 404
오류를 해결하는 데 도움이 됩니다.
로그를 확인하려면 다음 단계를 따르세요.
- 다음 명령어를 사용하여 NGINX 로그를 봅니다.
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- 로그 항목에서 다음 필드를 확인합니다.
필드 값 Upstream_status, status
404
X-Apigee-fault-code
messaging.adaptors.http.flow.ApplicationNotFound
로그의 메시지 ID를 기록해 둡니다.
- 메시지 프로세서 로그 확인
(
/opt/apigee/var/log/edge-message-processor/logs/system.log)
에서 다음을 확인하세요. 특정 API에 대한messaging.adaptors.http.flow.ApplicationNotFound
가 있거나 고유한 API 요청에 대한 2단계의 메시지 ID입니다.메시지 프로세서 로그의 샘플 오류 메시지
NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:POST, uri:/weather, message Id:null, exception:com.apigee.rest.framework.ResourceNotFoundException{ code = messaging.adaptors.http.flow.ApplicationNotFound, message = Unable to identify proxy for host: vh1 and url: /weather, associated contexts = []}, context:Context@342ea86b input=ClientInputChannel(SSLClientChannel[Accepted: Remote:10.123.123.123:8443 Local:10.135.33.68:62092]@1206954 useCount=1 bytesRead=0 bytesWritten=0 age=1ms lastIO=0ms isOpen=true)
위의 로그는 오류 코드와 오류 메시지를 보여줍니다.
code = messaging.adaptors.http.flow.ApplicationNotFound, message = Unable to identify proxy for host: vh1 and url: /weather
원인: 호스트 별칭과 포트 번호가 동일한 여러 가상 호스트
Apigee Edge 라우터 및 메시지 프로세서가 호스트 헤더, 포트 번호, URI 경로를 모두 사용합니다.
올바른 API 프록시로 트래픽을 라우팅해야 합니다 여러 가상 머신과 같은 모호한 정의가 있는 경우
호스트 별칭과 포트 번호가 동일한 호스트는 문서화되어 있으므로
안티패턴과
예기치 않은 동작을 유발할 수 있습니다. 흔히 접하게 되는 오류 중 하나는
Unable to identify proxy for host: VIRTUAL_HOST
and url: PATH
메시지와 함께 404
오류가 발생했습니다.
일반적으로 호스트 별칭이 동일한 가상 호스트가 여러 개 있는 경우
간헐적인 404
오류 이는 특정 API 프록시가
하나의 가상 호스트에서만 요청을 수락할 수 있습니다. API 요청이
특정 가상 호스트를 사용하면 성공 응답을 받게 됩니다.
그러나 API 요청이 API 프록시가 설정된 다른 가상 호스트로 라우팅되면
요청을 수락하도록 구성되지 않은 경우 API가 실패하고 이러한 404
가 표시됩니다.
오류가 발생했습니다.
<ph type="x-smartling-placeholder"></ph>
404 호스트의 프록시를 식별할 수 없음: <가상 호스트 이름> url: <path> 및
이 오류를 해결할 수 있습니다. 이 오류가 발생하는 원인이 없으면 다음 단계를 따르세요.
아래에서 중복된 호스트 별칭이 있는 가상 호스트로 인해 404
이(가) 발생하는지 확인하세요.
오류가 발생했습니다.
진단
다음 방법 중 하나를 사용하여
동일한 호스트 별칭/포트 번호로 404
오류 발생:
- Edge UI
- Management API
Edge UI
<ph type="x-smartling-placeholder">다음 안내에 따라 동일한 호스트를 가진 가상 호스트가 여러 개 있는지 확인하세요. 별칭/포트 번호를 입력합니다.
예를 들어 URL에 404
오류가 있는 경우
http://example.com:9001/proxy1
인 경우 어떤 가상 호스트가
호스트 별칭 example.com
및 포트 9001
.
- 퍼블릭 클라우드 및 프라이빗 클라우드의 새 Edge UI:
<ph type="x-smartling-placeholder">
- </ph>
- 관리를 선택합니다.
- Virtual Hosts(가상 호스트)를 선택합니다.
- 각 환경 검색 필터를 사용하여 가상 환경을 API가 사용되는 특정 호스트 별칭과 일치하는 호스트 호출되었습니다.
- 동일한 호스트 별칭을 사용하는 여러 개의 가상 호스트가 있는 경우 이 문제를 해결하기 위한 해결 방법을 확인하세요.
예를 들면 다음과 같습니다.
- Private Cloud의 기본 UI:
<ph type="x-smartling-placeholder">
- </ph>
- API 탭을 선택합니다.
- 환경 구성을 선택합니다.
- Virtual Hosts(가상 호스트)를 선택합니다.
- 각 환경의 가상 호스트 목록에서 일치하는 항목이 있는지 확인합니다. API 요청이 호출된 특정 호스트 별칭
- 동일한 호스트 별칭과 일치하는 가상 호스트가 여러 개 있는 경우 이 문제를 해결하기 위한 해결 방법을 확인하세요.
예:
Management API
<ph type="x-smartling-placeholder">다음 안내에 따라 동일한 호스트를 가진 가상 호스트가 여러 개 있는지 확인하세요. 별칭/포트 번호를 입력합니다.
운영 체제의 각 환경의 각 가상 호스트에 대한 정의를 어떤 가상 호스트가 동일한 호스트 별칭과 포트 번호를 가지고 있는지 확인할 수 있습니다.
예를 들어 URL에
404
오류가 있는 경우http://example.com:9001/proxy1
이면 어떤 가상 머신이 호스트 별칭은example.com
이고 포트는9001
입니다.환경 목록 가져오기
퍼블릭 클라우드 사용자:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
Private Cloud 사용자:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
각 항목의 의미는 다음과 같습니다.
ORGANIZATION_NAME는 조직의 이름입니다.
예:
curl http://127.0.0.1:8080/v1/organizations/myorg/environments -u USERNAME
[ "prod", "test", "dev" ]
환경의 가상 호스트 목록 가져오기
퍼블릭 클라우드 사용자:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
Private Cloud 사용자:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
각 항목의 의미는 다음과 같습니다.
ORGANIZATION_NAME는 조직의 이름입니다.
ENVIRONMENT_NAME은 환경 이름입니다.
예:
curl http://127.0.0.1:8080/v1/organizations/myorg/environments/test/virtualhosts -u USERNAME
[ "default" ]
환경의 각 가상 호스트에 대한 정의를 가져옵니다.
퍼블릭 클라우드 사용자:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
Private Cloud 사용자:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
각 항목의 의미는 다음과 같습니다.
ORGANIZATION_NAME는 조직의 이름입니다.
ENVIRONMENT_NAME은 환경 이름입니다.
VIRTUAL_HOST_NAME은 가상 호스트의 이름입니다.
예:
curl http://127.0.0.1:8080/v1/organizations/myorg/environments/test/virtualhosts/default -u USERNAME
{ "hostAliases" : [ "example.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }
조직의 다른 환경에도 위의 두 단계를 반복합니다.
이 예시에서는
dev
환경에 대해 이 단계를 반복합니다.curl http://127.0.0.1:8080/v1/organizations/myorg/environments/dev/virtualhosts -u USERNAME
[ "default" ]
curl http://127.0.0.1:8080/v1/organizations/myorg/environments/dev/virtualhosts/default -u USERNAME
{ "hostAliases" : [ "example.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }
이 예시에서는 두 가상 호스트
default
가 서로 다른 두 환경(test
및dev
)에서 동일한 호스트 별칭example.com
및 포트 번호를 포함해야 함9001
입니다. 이는404
오류의 원인입니다.- 동일한 호스트 별칭과 일치하는 가상 호스트가 여러 개 있는 경우 이 문제를 해결하기 위한 해결 방법을 확인하세요.
해상도
- 각 가상 호스트에 고유한 호스트 별칭 및 포트 조합만 포함되어 있는지 확인합니다.
- 호스트 별칭 및 포트 조합이 동일한 여러 가상 호스트를 확인한 경우 고유한 호스트 별칭으로 업데이트해야 합니다.
- Edge UI 또는 Management API를 사용하여 업데이트할 수 있습니다. 안내는 미만 가상 호스트 수정
- 각 호스트 별칭에 적절한 DNS 항목이 있는지 확인합니다. <ph type="x-smartling-placeholder">
- 위에서 설명한 예에서 구성이 다음과 같다면
curl -X GET http://localhost:8080/v1/organizations/myorg/environments -u user
[ "prod", "test", "dev" ]
<ph type="x-smartling-placeholder">curl -X GET http://localhost:8080/v1/organizations/myorg/environments/test/virtualhosts/default -u user
</ph>{ "hostAliases" : [ "example.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }
curl -X GET http://localhost:8080/v1/organizations/myorg/environments/dev/virtualhosts/default -u user
{ "hostAliases" : [ "example.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }
- 잘못된 가상 호스트가 겹치지 않도록 업데이트할 수 있습니다.
- 호스트 별칭을
example2.com
로 업데이트합니다. - 새 호스트 별칭에 이전 호스트 별칭과 유사한 DNS 항목이 있는지 확인합니다.
curl -X GET http://localhost:8080/v1/organizations/myorg/environments/dev/virtualhosts/default -u user -H 'Content-Type: application/json' -d '{ "hostAliases" : [ "example2.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }' -i
HTTP/1.1 200 OK Date: Tue, 02 Feb 2021 20:54:29 GMT Content-Type: application/json X-Apigee.user: user X-Apigee.organization: myorg X-Apigee.environment: dev X-Apigee.backends: management-server Date: Tue, 02 Feb 2021 20:54:29 GMT Content-Length: 152 { "hostAliases" : [ "example2.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }
- 프록시에 API를 다시 호출하고 일관되게 성공적인 응답을 받는지 확인합니다.
curl http://example.com:9001/proxy1
{ "slideshow": { "author": "Yours Truly", "date": "date of publication", "slides": [ { "title": "Wake up to WonderWidgets!", "type:": "all" }, { "items": [ "Why WonderWidgets are great", "Who buys WonderWidgets" ], "title": "Overview", "type": "all" } ], "title": "Sample Slide Show" } }
- 문제가 계속되면 진단 정보를 수집해야 함으로 이동합니다.
진단 정보 수집 필요
위의 안내를 따른 후에도 문제가 지속되면 다음을 수집합니다. Apigee Edge 지원팀에 문의하세요.
퍼블릭 클라우드 사용자인 경우 다음 정보를 입력합니다.
- 조직 이름
- 환경 이름
- API 프록시 이름
curl
명령어를 완료하여404
오류를 재현합니다.404
오류가 현재 발생하지 않고 있다면 기간을 제공합니다. 이전에404
오류가 발생했을 때의 시간대 정보를 포함합니다.
Private Cloud 사용자인 경우 다음 정보를 입력합니다.
- 실패한 요청에 대해 발견된 전체 오류 메시지
- 관찰 중인 조직, 환경 이름, API 프록시 이름
오류
404
개 - API 프록시 번들
- NGINX 액세스 로그
/opt/apigee/var/log/edge-router/nginx/ORGANIZATION_NAME~ENVIRONMENT_NAME.PORT#_access_log
- 메시지 프로세서 로그
/opt/apigee/var/log/edge-message-processor/logs/system.log
404
오류 발생 시 시간대 정보가 포함된 기간