Wyświetlasz dokumentację Apigee Edge.
Przejdź do
dokumentacji Apigee X. info
Krótki opis problemu
Aplikacja kliencka otrzymuje kod stanu HTTP 404 z komunikatem Not
Found i komunikatem o błędzie Unable to identify proxy for host: VIRTUAL_HOST and
url: PATH w odpowiedzi na wywołania interfejsu API.
Ten błąd oznacza, że Edge nie mógł znaleźć proxy interfejsu API dla określonego hosta wirtualnego i ścieżki.
Komunikat o błędzie
Aplikacja kliencka otrzymuje ten kod odpowiedzi:
HTTP/1.1 404 Not Found
Dodatkowo możesz zobaczyć komunikat o błędzie podobny do tego:
{
"fault":{
"faultstring":"Unable to identify proxy for host: default and url: \/oauth2\/token",
"detail":{
"errorcode":"messaging.adaptors.http.flow.ApplicationNotFound"
}
}
}Możliwe przyczyny
| Przyczyna | Opis | Instrukcje rozwiązywania problemów, których dotyczy |
|---|---|---|
| Host wirtualny z duplikatem aliasu hosta | Kilka hostów wirtualnych ma ten sam alias hosta i numer portu. | Użytkownicy Public Cloud i Private Cloud Edge |
Typowe czynności diagnostyczne
Dzienniki NGINX i procesora komunikatów pomogą w rozwiązaniu błędu 404.
Aby sprawdzić dzienniki:
- Wyświetl dzienniki NGINX za pomocą tego polecenia:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Sprawdź te pola w wpisach dziennika:
Pole Wartość Upstream_status, status404X-Apigee-fault-codemessaging.adaptors.http.flow.ApplicationNotFoundZanotuj identyfikator wiadomości z dzienników.
- Sprawdź dzienniki procesora komunikatów
(
/opt/apigee/var/log/edge-message-processor/logs/system.log)aby sprawdzić, czy maszmessaging.adaptors.http.flow.ApplicationNotFoundw przypadku konkretnego interfejsu API, lub czy masz unikalny identyfikator wiadomości z kroku 2 w przypadku żądania do interfejsu API.Przykładowy komunikat o błędzie z dziennika procesora komunikatów
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)
Powyższy dziennik pokazuje kod błędu i komunikat o błędzie:
code = messaging.adaptors.http.flow.ApplicationNotFound, message = Unable to identify proxy for host: vh1 and url: /weather
Przyczyna: wiele hostów wirtualnych z tym samym aliasem hosta i numerem portu
Routery i procesory komunikatów Apigee Edge używają nagłówka hosta, numeru portu i ścieżek URI
do kierowania ruchu do prawidłowego proxy interfejsu API. Niejednoznaczne definicje, takie jak wiele hostów wirtualnych z tym samym aliasem hosta i numerem portu, są udokumentowanym anty-wzorcem i mogą prowadzić do nieoczekiwanych zachowań. Jednym z typowych błędów, które możesz zauważyć, jest błąd
404 z komunikatem Unable to identify proxy for host: VIRTUAL_HOST
and url: PATH.
Zwykle, jeśli istnieje wiele hostów wirtualnych z tym samym aliasem hosta, występują
sporadyczne 404 błędy. Dzieje się tak, ponieważ konkretne proxy interfejsu API może być skonfigurowane
do akceptowania żądań tylko na jednym z hostów wirtualnych. Gdy żądania API są kierowane do
konkretnego hosta wirtualnego skonfigurowanego w proxy interfejsu API, otrzymasz odpowiedź z informacją o powodzeniu.
Gdy jednak żądania API są kierowane do innych hostów wirtualnych, w przypadku których proxy interfejsu API nie jest skonfigurowane do akceptowania żądań, interfejsy API będą zwracać błędy 404.
Postępuj zgodnie z instrukcjami podanymi w
artykule 404 Nie udało się zidentyfikować serwera proxy dla hosta <nazwa hosta wirtualnego> i adresu URL <ścieżka> i
rozwiąż ten błąd. Jeśli żadna z przyczyn nie powoduje tego błędu, wykonaj te czynności
poniżej, aby sprawdzić, czy błędy 404
są spowodowane przez hosty wirtualne z duplikatami aliasów hostów.
Diagnostyka
Aby sprawdzić, czy istnieje wiele hostów wirtualnych z tym samym aliasem hosta lub numerem portu, co powoduje błędy 404:
- Interfejs Edge
- Interfejsy API do zarządzania
Interfejs Edge
Postępuj zgodnie z tymi instrukcjami, aby sprawdzić, czy istnieje wiele hostów wirtualnych z tym samym aliasem hosta lub numerem portu, korzystając z interfejsu Edge.
Jeśli na przykład wystąpił błąd 404 z adresem URL
http://example.com:9001/proxy1, musisz znaleźć hosty wirtualne, które mają
alias hosta example.com i port 9001.
- W Public Cloud i nowym interfejsie Edge w Private Cloud:
- Wybierz Administracja.
- Wybierz Hosty wirtualne.
- W przypadku każdego środowiska użyj filtra wyszukiwania, aby określić hosty wirtualne , które pasują do konkretnego aliasu hosta , za pomocą którego wywoływano żądania API.
- Jeśli znajdziesz wiele hostów wirtualnych używających tego samego aliasu hosta , przejdź do sekcji Rozwiązanie, aby rozwiązać ten problem.
Przykład:

- W klasycznym interfejsie w Private Cloud:
- Kliknij kartę Interfejsy API .
- Wybierz Konfiguracja środowiska.
- Wybierz Hosty wirtualne.
- W przypadku każdego środowiska wyświetl listę hostów wirtualnych , aby sprawdzić, czy któryś z nich pasuje do konkretnego aliasu hosta , za pomocą którego wywoływano żądania API.
- Jeśli znajdziesz wiele hostów wirtualnych pasujących do tego samego aliasu hosta , przejdź do sekcji Rozwiązanie , aby rozwiązać ten problem.
Przykład:

Interfejsy API do zarządzania
Postępuj zgodnie z tymi instrukcjami, aby sprawdzić, czy istnieje wiele hostów wirtualnych z tym samym aliasem hosta lub numerem portu, korzystając z interfejsów API do zarządzania.
Pobierz definicję każdego hosta wirtualnego w każdym środowisku w organizacji, aby sprawdzić, które hosty wirtualne mają ten sam alias hosta i numer portu:
Jeśli na przykład wystąpił błąd
404z adresem URLhttp://example.com:9001/proxy1, musisz znaleźć hosty wirtualne, które mają alias hostaexample.comi port9001.Pobierz listę środowisk
Użytkownik Public Cloud:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
Użytkownik Private Cloud:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
Gdzie:
ORGANIZATION_NAME to nazwa organizacji.
Przykład:
curl http://127.0.0.1:8080/v1/organizations/myorg/environments -u USERNAME
[ "prod", "test", "dev" ]
Pobierz listę hostów wirtualnych w środowisku
Użytkownik Public Cloud:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
Użytkownik Private Cloud:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
Gdzie:
ORGANIZATION_NAME to nazwa organizacji.
ENVIRONMENT_NAME to nazwa środowiska.
Przykład:
curl http://127.0.0.1:8080/v1/organizations/myorg/environments/test/virtualhosts -u USERNAME
[ "default" ]
Pobierz definicję każdego hosta wirtualnego w środowisku.
Użytkownik Public Cloud:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
Użytkownik Private Cloud:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
Gdzie:
ORGANIZATION_NAME to nazwa organizacji.
ENVIRONMENT_NAME to nazwa środowiska.
VIRTUAL_HOST_NAME to nazwa hosta wirtualnego.
Przykład:
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" : [ ] }Powtórz 2 kroki wymienione powyżej w przypadku innych środowisk w organizacji.
W tym przykładzie powtórz kroki w środowisku
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" : [ ] }W tym przykładzie widać, że 2 hosty wirtualne
defaultw 2 różnych środowiskach,testidev, zawierają ten sam alias hostaexample.comi numer portu9001. Jest to przyczyna błędów404.- Jeśli znajdziesz wiele hostów wirtualnych pasujących do tego samego aliasu hosta , przejdź do sekcji Rozwiązanie , aby rozwiązać ten problem.
Rozdzielczość
- Upewnij się, że każdy host wirtualny zawiera tylko unikalne kombinacje aliasu hosta i portu.
- Jeśli znajdziesz wiele hostów wirtualnych z tymi samymi kombinacjami aliasu hosta i portu musisz je zaktualizować, aby używały unikalnego aliasu hosta.
- Możesz je zaktualizować za pomocą interfejsu Edge lub interfejsu API zarządzania Google Analytics. Instrukcje znajdziesz w sekcji Zmienianie hosta wirtualnego.
- Upewnij się, że każdy alias hosta ma prawidłowy wpis DNS.
- Jeśli w omawianym powyżej przykładzie konfiguracja wyglądała tak:
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" : [ ] }- Możesz zaktualizować nieprawidłowy host wirtualny, aby się nie nakładały.
- Zaktualizuj alias hosta na
example2.com. - Upewnij się, że nowy alias hosta ma podobny wpis DNS jak poprzedni alias hosta.
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" : [ ] }
- Ponownie wywołaj interfejs API w proxy i sprawdź, czy stale otrzymujesz odpowiedzi z informacją o powodzeniu:
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" } }
- Jeśli problem nadal występuje, przejdź do sekcji Informacje diagnostyczne, które musisz zebrać.
Informacje diagnostyczne, które musisz zebrać
Jeśli problem nadal występuje po wykonaniu powyższych instrukcji, zbierz te informacje diagnostyczne i skontaktuj się z zespołem pomocy Apigee Edge:
Jeśli jesteś użytkownikiem Public Cloud, podaj te informacje:
- Nazwa organizacji
- Nazwa środowiska
- Nazwa proxy interfejsu API
- Pełne polecenie
curlumożliwiające odtworzenie błędu404 - Jeśli błędy
404nie występują obecnie, podaj okres z informacjami o strefie czasowej, w którym błędy404występowały w przeszłości.
Jeśli jesteś użytkownikiem Private Cloud, podaj te informacje:
- Pełny komunikat o błędzie zaobserwowany w przypadku nieudanych żądań
- Nazwa organizacji, środowiska i proxy interfejsu API, w przypadku których występują
404błędy - Pakiet proxy interfejsu API
- Dzienniki dostępu NGINX
/opt/apigee/var/log/edge-router/nginx/ORGANIZATION_NAME~ENVIRONMENT_NAME.PORT#_access_log - Dzienniki procesora komunikatów
/opt/apigee/var/log/edge-message-processor/logs/system.log - Okres z informacjami o strefie czasowej, w którym wystąpiły błędy
404