Sie lesen gerade die Dokumentation zu Apigee Edge.
Zur Dokumentation zu
Apigee X. info
Symptom
Die Clientanwendung erhält als Antwort auf die API-Aufrufe den HTTP-Statuscode 404 mit der Meldung Not
Found und der Fehlermeldung Unable to identify proxy for host: VIRTUAL_HOST and
url: PATH.
Dieser Fehler bedeutet, dass Edge den API-Proxy für den angegebenen virtuellen Host und Pfad nicht finden konnte.
Fehlermeldung
Die Clientanwendung erhält den folgenden Antwortcode:
HTTP/1.1 404 Not Found
Außerdem wird möglicherweise eine Fehlermeldung wie die unten gezeigte angezeigt:
{
"fault":{
"faultstring":"Unable to identify proxy for host: default and url: \/oauth2\/token",
"detail":{
"errorcode":"messaging.adaptors.http.flow.ApplicationNotFound"
}
}
}Mögliche Ursachen
| Ursache | Beschreibung | Anleitungen zur Fehlerbehebung gelten für |
|---|---|---|
| Virtueller Host mit doppeltem Hostalias | Mehrere virtuelle Hosts haben denselben Hostalias und dieselbe Portnummer. | Nutzer von Edge Public und Private Cloud |
Allgemeine Diagnoseschritte
NGINX- und Message Processor-Logs können bei der Fehlerbehebung des 404-Fehlers hilfreich sein.
So prüfen Sie die Logs:
- Rufen Sie die NGINX-Logs mit dem folgenden Befehl auf:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Prüfen Sie die folgenden Felder in den Logeinträgen:
Feld Wert Upstream_status, status404X-Apigee-fault-codemessaging.adaptors.http.flow.ApplicationNotFoundNotieren Sie sich die Nachrichten-ID aus den Logs.
- Prüfen Sie in den Message Processor-Logs
(
/opt/apigee/var/log/edge-message-processor/logs/system.log)ob Siemessaging.adaptors.http.flow.ApplicationNotFoundfür die jeweilige API haben oder ob Sie die eindeutige Nachrichten-ID aus Schritt 2 für die API-Anfrage haben.Beispiel für eine Fehlermeldung aus dem Message Processor-Log
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)
Im obigen Log sind der Fehlercode und die Fehlermeldung wie folgt:
code = messaging.adaptors.http.flow.ApplicationNotFound, message = Unable to identify proxy for host: vh1 and url: /weather
Ursache: Mehrere virtuelle Hosts mit demselben Hostalias und derselben Portnummer
Apigee Edge-Router und Message Processor verwenden sowohl den Host-Header als auch die Portnummer und die URI-Pfade
um Traffic an den richtigen API-Proxy weiterzuleiten. Mehrdeutige Definitionen wie mehrere virtuelle
Hosts mit demselben Hostalias und derselben Portnummer sind ein dokumentiertes
Anti-Pattern und
können zu unerwartetem Verhalten führen. Einer der häufigsten Fehler ist ein
404 Fehler mit der Meldung Unable to identify proxy for host: VIRTUAL_HOST
and url: PATH.
Wenn mehrere virtuelle Hosts mit demselben Hostalias vorhanden sind, treten in der Regel
zeitweise 404 Fehler auf. Das liegt daran, dass der jeweilige API-Proxy möglicherweise so konfiguriert ist,
dass er die Anfragen nur auf einem der virtuellen Hosts akzeptiert. Wenn die API-Anfragen an den
spezifischen virtuellen Host weitergeleitet werden, der im API-Proxy konfiguriert ist, erhalten Sie eine erfolgreiche Antwort.
Wenn die API-Anfragen jedoch an die anderen virtuellen Hosts weitergeleitet werden, für die der API-Proxy nicht so konfiguriert ist, dass er die Anfragen akzeptiert, schlagen die APIs mit diesen 404
Fehlern fehl.
Folgen Sie der Anleitung unter
404 – Proxy für Host <virtual host name> und URL <path> kann nicht identifiziert werden und
beheben Sie diesen Fehler. Wenn keine der Ursachen zu diesem Fehler führt, prüfen Sie anhand der Schritte
unten, ob virtuelle Hosts mit doppelten Hostaliassen die 404
Fehler verursachen.
Diagnose
Verwenden Sie eine der folgenden Methoden, um festzustellen, ob mehrere virtuelle Hosts mit demselben Hostalias/derselben Portnummer zu 404 Fehlern führen:
- Edge-UI
- Verwaltungs-APIs
Edge-UI
Folgen Sie dieser Anleitung, um festzustellen, ob mehrere virtuelle Hosts mit demselben Host alias/derselben Portnummer vorhanden sind.
Wenn Sie beispielsweise den 404-Fehler mit der URL
http://example.com:9001/proxy1 beobachtet haben, müssen Sie herausfinden, welche virtuellen Hosts
den Hostalias example.com und den Port 9001 haben.
- In der Public Cloud und der neuen Edge-UI in der Private Cloud:
- Wählen Sie Verwalten aus.
- Wählen Sie Virtuelle Hosts aus.
- Verwenden Sie für jede Umgebung den Suchfilter, um die virtuellen Hosts zu ermitteln, die mit dem spezifischen Hostalias übereinstimmen, mit dem die API Anfragen aufgerufen wurden.
- Wenn Sie mehrere virtuelle Hosts mit demselben Hostalias finden, lesen Sie den Abschnitt Auflösung, um dieses Problem zu beheben.
Beispiel :

- In der klassischen UI in der Private Cloud:
- Wählen Sie den APIs Tab aus.
- Wählen Sie Umgebungskonfiguration aus.
- Wählen Sie Virtuelle Hosts aus.
- Sehen Sie sich für jede Umgebung die Liste der virtuellen Hosts an, um festzustellen, ob einer mit dem spezifischen Hostalias übereinstimmt, mit dem die API-Anfragen aufgerufen wurden.
- Wenn Sie mehrere virtuelle Hosts finden, die mit demselben Hostalias übereinstimmen, lesen Sie den Abschnitt Auflösung, um dieses Problem zu beheben.
Beispiel :

Verwaltungs-APIs
Folgen Sie dieser Anleitung, um festzustellen, ob mehrere virtuelle Hosts mit demselben Host alias/derselben Portnummer vorhanden sind.
Rufen Sie die Definition der einzelnen virtuellen Hosts in den einzelnen Umgebungen Ihrer Organisationen ab, um zu sehen, welche virtuellen Hosts denselben Hostalias und dieselbe Portnummer haben:
Wenn Sie beispielsweise den
404Fehler mit der URLhttp://example.com:9001/proxy1beobachtet haben, müssen Sie herausfinden, welche virtuellen Hosts den Hostaliasexample.comund den Port9001haben.Liste der Umgebungen abrufen
Public Cloud-Nutzer :
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
Private Cloud-Nutzer :
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
Wobei:
ORGANIZATION_NAME ist der Name der Organisation.
Beispiel :
curl http://127.0.0.1:8080/v1/organizations/myorg/environments -u USERNAME
[ "prod", "test", "dev" ]
Liste der virtuellen Hosts in einer Umgebung abrufen
Public Cloud-Nutzer :
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
Private Cloud-Nutzer :
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
Wobei:
ORGANIZATION_NAME ist der Name der Organisation.
ENVIRONMENT_NAME ist der Name der Umgebung.
Beispiel :
curl http://127.0.0.1:8080/v1/organizations/myorg/environments/test/virtualhosts -u USERNAME
[ "default" ]
Rufen Sie die Definition der einzelnen virtuellen Hosts in der Umgebung ab.
Public Cloud-Nutzer :
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
Private Cloud-Nutzer :
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
Wobei:
ORGANIZATION_NAME ist der Name der Organisation.
ENVIRONMENT_NAME ist der Name der Umgebung.
VIRTUAL_HOST_NAME ist der Name des virtuellen Hosts.
Beispiel :
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" : [ ] }Wiederholen Sie die beiden obigen Schritte für die anderen Umgebungen in Ihrer Organisation.
Wiederholen Sie in diesem Beispiel die Schritte für die Umgebung
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" : [ ] }In diesem Beispiel sehen Sie, dass die beiden virtuellen Hosts
defaultin zwei verschiedenen Umgebungen,testunddev, denselben Hostaliasexample.comund dieselbe Portnummer9001enthalten. Das ist die Ursache für die404-Fehler.- Wenn Sie mehrere virtuelle Hosts finden, die mit demselben Hostalias übereinstimmen, lesen Sie den Abschnitt Auflösung, um dieses Problem zu beheben.
Auflösung
- Achten Sie darauf, dass jeder virtuelle Host nur eindeutige Hostalias- und Portkombinationen enthält.
- Wenn Sie mehrere virtuelle Hosts mit denselben Hostalias- und Portkombinationen gefunden haben müssen Sie diese mit einem eindeutigen Hostalias aktualisieren.
- Sie können diese über die Edge-UI oder die Verwaltungs-API aktualisieren. Eine Anleitung finden Sie unter Virtuellen Host ändern.
- Achten Sie darauf, dass jeder Hostalias einen entsprechenden DNS-Eintrag hat.
- Wenn unsere Konfiguration im oben beschriebenen Beispiel so aussieht:
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" : [ ] }- Sie können den falschen virtuellen Host so aktualisieren, dass sie sich nicht überschneiden.
- Aktualisieren Sie dazu den Hostalias als
example2.com. - Achten Sie darauf, dass der neue Hostalias einen ähnlichen DNS-Eintrag wie der vorherige Hostalias hat.
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" : [ ] }
- Führen Sie die API-Aufrufe noch einmal an den Proxy aus und prüfen Sie, ob Sie durchgehend erfolgreiche Antworten erhalten:
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" } }
- Wenn das Problem weiterhin besteht, gehen Sie zu Erfassen von Diagnoseinformationen erforderlich.
Erfassen von Diagnoseinformationen erforderlich
Wenn das Problem auch nach Befolgen der obigen Anweisungen weiterhin besteht, sammeln Sie die folgenden Diagnoseinformationen und wenden Sie sich dann an den Apigee Edge-Support:
Wenn Sie ein Public Cloud-Nutzer sind, geben Sie die folgenden Informationen an:
- Name der Organisation
- Name der Umgebung
- Name des API-Proxys
- Vollständiger
curl-Befehl zum Reproduzieren des404-Fehlers - Wenn die
404-Fehler derzeit nicht auftreten, geben Sie den Zeitraum mit den Zeitzoneninformationen an, in dem in der Vergangenheit404-Fehler aufgetreten sind.
Wenn Sie ein Private Cloud-Nutzer sind, geben Sie die folgenden Informationen an:
- Vollständige Fehlermeldung für die fehlgeschlagenen Anfragen
- Name der Organisation, der Umgebung und des API-Proxys, für die
404Fehler auftreten - API-Proxy-Bundle
- NGINX-Zugriffslogs
/opt/apigee/var/log/edge-router/nginx/ORGANIZATION_NAME~ENVIRONMENT_NAME.PORT#_access_log - Message Processor-Logs
/opt/apigee/var/log/edge-message-processor/logs/system.log - Der Zeitraum mit den Zeitzoneninformationen, in dem die
404-Fehler aufgetreten sind