Apigee Edge 문서입니다.
Go to the
Apigee X 문서로 이동합니다. info
증상
클라이언트 애플리케이션은 API 호출에 대한 응답으로 Not
Found 메시지와 Unable to identify proxy for host: VIRTUAL_HOST and
url: PATH 오류 메시지와 함께 HTTP 상태 코드 404를 받습니다.
이 오류는 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"
}
}
}가능한 원인
| 원인 | 설명 | 다음에 관한 문제 해결 안내 |
|---|---|---|
| 호스트 별칭이 중복된 가상 호스트 | 여러 가상 호스트에 동일한 호스트 별칭과 포트 번호가 있습니다. | Edge Public 및 Private Cloud 사용자 |
일반적인 진단 단계
NGINX 및 메시지 프로세서 로그는 404 오류를 해결하는 데 도움이 됩니다.
다음 단계에 따라 로그를 확인합니다.
- 다음 명령어를 사용하여 NGINX 로그를 봅니다.
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- 로그 항목에서 다음 필드를 확인합니다.
필드 값 Upstream_status, status404X-Apigee-fault-codemessaging.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 프록시
로 라우팅합니다. 호스트 별칭과 포트 번호가 같은 가상 호스트가 여러 개 있는 것과 같은 모호한 정의는 문서화된 안티패턴이며 예기치 않은 동작을 유발할 수 있습니다. 일반적으로 관찰되는 오류 중 하나는
404 오류이며 메시지는 Unable to identify proxy for host: VIRTUAL_HOST
and url: PATH입니다.
일반적으로 동일한 호스트 별칭이 있는 가상 호스트가 여러 개 있으면
간헐적인 404 오류가 발생합니다. 이는 특정 API 프록시가 가상 호스트 중 하나에서만 요청을 수락하도록 구성될 수 있기 때문입니다. API 요청이 API 프록시에 구성된
특정 가상 호스트로 라우팅되면 성공적인 응답을 받게 됩니다.
그러나 API 프록시가 요청을 수락하도록 구성되지 않은 다른 가상 호스트로 API 요청이 라우팅되면 API가 이러한 404
오류와 함께 실패합니다.
404 호스트: <가상 호스트 이름> 및 url: <경로>의 프록시를 식별할 수 없음에 제공된 안내를 따르고 및
이 오류를 해결합니다. 이러한 원인 중 어느 것도 이 오류를 유발하지 않는 경우 아래 단계
에 따라 호스트 별칭이 중복된 가상 호스트가 404
오류를 유발하는지 확인합니다.
진단
다음 방법 중 하나를 사용하여 동일한 호스트 별칭/포트 번호가 있는 가상 호스트가 여러 개 있어
404 오류가 발생하는지 확인합니다.
- Edge UI
- Management API
Edge UI
이 안내에 따라 Edge UI를 사용하여 동일한 호스트 별칭/포트 번호가 있는 가상 호스트가 여러 개 있는지 확인합니다.
예를 들어 URL
http://example.com:9001/proxy1에서 404 오류가 관찰된 경우 호스트 별칭 example.com과 포트 9001이 있는 가상 호스트를 찾아야 합니다.
- Public Cloud 및 Private Cloud의 새 Edge UI:
- 관리 를 선택합니다.
- 가상 호스트 를 선택합니다.
- 각 환경에 대해 검색 필터를 사용하여 API 요청이 호출된 특정 호스트 별칭과 일치하는 가상 호스트를 확인합니다.
- 동일한 호스트 별칭 을 사용하는 가상 호스트 가 여러 개 있는 경우 해결 방법으로 이동하여 이 문제를 해결합니다.
예:

- Private Cloud의 기존 UI:
- API 탭을 선택합니다.
- 환경 구성 을 선택합니다.
- 가상 호스트 를 선택합니다.
- 각 환경 에 대해 가상 호스트 목록을 보고 API 요청이 호출된 특정 호스트 별칭 과 일치하는 항목이 있는지 확인합니다.
- 동일한 호스트 별칭과 일치하는 가상 호스트가 여러 개 있는 경우 해결 방법으로 이동하여 이 문제를 해결합니다.
예:

Management API
이 안내에 따라 Management API를 사용하여 동일한 호스트 별칭/포트 번호가 있는 가상 호스트가 여러 개 있는지 확인합니다.
조직의 각 환경에서 가상 호스트의 정의를 가져와 동일한 호스트 별칭과 포트 번호가 있는 가상 호스트를 확인합니다.
예를 들어 URL
http://example.com:9001/proxy1에서404오류가 관찰된 경우 호스트 별칭example.com과 포트9001이 있는 가상 호스트를 찾아야 합니다.환경 목록 가져오기
Public Cloud 사용자:
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" ]
환경의 가상 호스트 목록 가져오기
Public Cloud 사용자:
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" ]
환경에서 각 가상 호스트의 정의를 가져옵니다.
Public Cloud 사용자:
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" : [ ] }이 예에서는 서로 다른 두 환경(
test및dev)의 두 가상 호스트default에 모두 동일한 호스트 별칭example.com과 포트 번호9001가 포함되어 있음을 확인할 수 있습니다. 이것이404오류의 원인입니다.- 동일한 호스트 별칭과 일치하는 가상 호스트가 여러 개 있는 경우 해결 방법으로 이동하여 이 문제를 해결합니다.
해결 방법
- 각 가상 호스트에 고유한 호스트 별칭과 포트 조합만 포함되어 있는지 확인합니다.
- 동일한 호스트 별칭과 포트 조합이 있는 가상 호스트가 여러 개 있는 것으로 확인되면 고유한 호스트 별칭으로 업데이트해야 합니다.
- Edge UI 또는 Management API를 사용하여 업데이트할 수 있습니다. 안내는 가상 호스트 수정을 참고하세요.
- 각 호스트 별칭에 적절한 DNS 항목이 있는지 확인합니다.
- 위에서 설명한 예에서 구성이 다음과 같은 경우:
curl -X GET http://localhost:8080/v1/organizations/myorg/environments -u user
[ "prod", "test", "dev" ]
curl -X GET http://localhost:8080/v1/organizations/myorg/environments/test/virtualhosts/default -u user
{ "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" : [ ] }' -iHTTP/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 지원팀에 문의하세요.
Public Cloud 사용자인 경우 다음 정보를 제공하세요.
- 조직 이름
- 환경 이름
- API 프록시 이름
404오류를 재현하는 전체curl명령어404오류가 현재 발생하지 않는 경우 과거에404오류가 발생한 기간과 시간대 정보를 제공합니다.
Private Cloud 사용자인 경우 다음 정보를 제공하세요.
- 실패한 요청에 대해 관찰된 전체 오류 메시지
- `
404` 오류가 관찰되는 조직, 환경 이름, API 프록시 이름 - 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오류가 발생한 기간과 시간대 정보