Sie sehen die Dokumentation zu Apigee Edge.
Zur Apigee X-Dokumentation weitere Informationen
Symptom
Die Clientanwendung erhält den HTTP-Statuscode 404
mit der Meldung Not
Found
und der Fehlermeldung Unable to identify proxy for host: VIRTUAL_HOST and
url: PATH
als Antwort auf die API-Aufrufe.
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 folgende 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 sind bei der Behebung des Fehlers 404
hilfreich.
So prüfen Sie die Protokolle:
- 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, status
404
X-Apigee-fault-code
messaging.adaptors.http.flow.ApplicationNotFound
Notieren Sie sich die Nachrichten-ID aus den Protokollen.
- Prüfen Sie die Message Processor-Logs (
/opt/apigee/var/log/edge-message-processor/logs/system.log)
, um festzustellen, ob Siemessaging.adaptors.http.flow.ApplicationNotFound
für die jeweilige API haben oder ob Sie die eindeutige Nachrichten-ID aus Schritt 2 für die API-Anfrage haben.Beispiel einer Fehlermeldung aus dem Message Processor-Protokoll
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)
Das Protokoll oben zeigt den Fehlercode und die Fehlermeldung wie folgt an:
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 Processorn verwenden sowohl den Hostheader, die Portnummer als auch die URI-Pfade, um den Traffic an den richtigen API-Proxy weiterzuleiten. Mehrdeutige Definitionen wie mehrere virtuelle Hosts mit demselben Hostalias und derselben Portnummer sind ein dokumentiertes Anti-Muster und können zu unerwartetem Verhalten führen. Einer der häufigsten Fehler, die auftreten, 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 spezifische API-Proxy so konfiguriert werden kann, dass er die Anfragen nur auf einem der virtuellen Hosts akzeptiert. Wenn die API-Anfragen an den im API-Proxy konfigurierten virtuellen Host weitergeleitet werden, erhalten Sie eine erfolgreiche Antwort.
Wenn die API-Anfragen jedoch an die anderen virtuellen Hosts weitergeleitet werden, an die der API-Proxy nicht für die Annahme der Anfragen konfiguriert ist, schlagen die APIs mit den folgenden 404
-Fehlern fehl.
Folgen Sie den Anweisungen in
404 Proxy für Host konnte nicht identifiziert werden: <Virtueller Hostname> und URL: <Pfad> und beheben Sie diesen Fehler. Wenn keine der Ursachen zu diesem Fehler führt, führen Sie die folgenden Schritte aus, um festzustellen, ob virtuelle Hosts mit doppelten Hostaliassen den Fehler 404
verursachen.
Diagnose
Ermitteln Sie mit einer der folgenden Methoden, ob mehrere virtuelle Hosts mit demselben Hostalias/gleichen Port-# vorhanden sind, was zu 404
-Fehlern führt:
- Edge-Benutzeroberfläche
- Verwaltungs-APIs
Edge-Benutzeroberfläche
Folgen Sie dieser Anleitung, um mithilfe der Edge-Benutzeroberfläche festzustellen, ob mehrere virtuelle Hosts mit demselben Hostalias/gleichen Port-Nr. vorhanden sind.
Wenn Sie beispielsweise den Fehler 404
mit der URL http://example.com:9001/proxy1
beobachten, müssen Sie herausfinden, welche virtuellen Hosts den Hostalias example.com
und Port 9001
haben.
- Gehen Sie in der öffentlichen Cloud und in der neuen Edge-Benutzeroberfläche in der privaten Cloud so vor:
- Wählen Sie Verwalten.
- Wählen Sie Virtuelle Hosts aus.
- Bestimmen Sie für jede Umgebung mit dem Suchfilter die virtuellen Hosts, die dem spezifischen Host-Alias entsprechen, mit dem die API-Anfragen aufgerufen wurden.
- Wenn Sie mehrere virtuelle Hosts mit demselben Hostalias finden, rufen Sie Lösung auf, um das Problem zu beheben.
Beispiel:
- In der klassischen UI in der Private Cloud:
- Wählen Sie den Tab APIs aus.
- Wählen Sie Umgebungskonfiguration aus.
- Wählen Sie Virtuelle Hosts aus.
- Rufen Sie für jede Umgebung die Liste der virtuellen Hosts auf, um zu sehen, ob sie mit dem spezifischen Host-Alias übereinstimmen, mit dem die API-Anfragen aufgerufen wurden.
- Wenn Sie mehrere virtuelle Hosts finden, die mit demselben Host-Alias übereinstimmen, rufen Sie Lösung auf, um das Problem zu beheben.
Beispiel:
Verwaltungs-APIs
Anhand dieser Anleitung können Sie mit den Management APIs feststellen, ob mehrere virtuelle Hosts mit demselben Hostalias/gleichen Port-Nummer vorhanden sind.
Rufen Sie die Definition der einzelnen virtuellen Hosts in jeder Umgebung in Ihrer Organisation ab, um zu sehen, welche virtuellen Hosts denselben Hostalias und dieselbe Portnummer haben:
Wenn Sie beispielsweise den Fehler
404
mit der URLhttp://example.com:9001/proxy1
beobachten, müssen Sie herausfinden, welche virtuellen Hosts den Hostaliasexample.com
und Port9001
haben.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.
Example:
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.
Example:
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.
Example:
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 oben genannten Schritte für die anderen Umgebungen in Ihrer Organisation.
Wiederholen Sie in diesem Beispiel die Schritte für die
dev
-Umgebung: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
default
in zwei verschiedenen Umgebungen,test
unddev
, beide denselben Hostaliasexample.com
und die Portnummer9001
enthalten. Dies ist die Ursache für404
-Fehler.- Wenn Sie mehrere virtuelle Hosts finden, die mit demselben Host-Alias übereinstimmen, rufen Sie Lösung auf, um das Problem zu beheben.
Auflösung
- Achten Sie darauf, dass jeder virtuelle Host nur eindeutige Kombinationen aus Hostalias und Port enthält.
- Wenn Sie mehrere virtuelle Hosts mit denselben Kombinationen aus Hostalias und Port identifiziert haben, müssen Sie diese mit einem eindeutigen Hostalias aktualisieren.
- Sie können diese mit der Edge-Benutzeroberfläche oder der Management API aktualisieren. Eine Anleitung finden Sie unter Virtuellen Host ändern.
- Achten Sie darauf, dass für jeden Hostalias ein korrekter DNS-Eintrag vorhanden ist.
- Wenn unsere Konfiguration im oben beschriebenen Beispiel so aussähe:
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 er sich nicht überschneidet.
- Das heißt, Sie aktualisieren 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" : [ ] }' -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" : [ ] }
- Führen Sie die API-Aufrufe noch einmal an den Proxy aus und prüfen Sie, ob Sie konsistent 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 Anleitung weiterhin besteht, stellen Sie die folgenden Diagnoseinformationen zusammen und wenden Sie sich an den Apigee Edge-Support:
Wenn Sie ein Public Cloud-Nutzer sind, geben Sie die folgenden Informationen an:
- Name der Organisation
- Name der Umgebung
- API-Proxy-Name
- Führen Sie den Befehl
curl
aus, um den Fehler404
zu reproduzieren. - Wenn die
404
-Fehler derzeit nicht auftreten, geben Sie den Zeitraum mit den Zeitzoneninformationen an, für die in der Vergangenheit404
-Fehler aufgetreten sind.
Wenn Sie ein Private Cloud-Nutzer sind, geben Sie die folgenden Informationen an:
- Vollständige Fehlermeldung bei fehlgeschlagenen Anfragen
- Organisation, Umgebungsname und API-Proxy-Name, für die Sie
404
Fehler beobachten - API-Proxy-Bundle
- NGINX-Zugriffslogs
/opt/apigee/var/log/edge-router/nginx/ORGANIZATION_NAME~ENVIRONMENT_NAME.PORT#_access_log
- Message Processor-Protokolle
/opt/apigee/var/log/edge-message-processor/logs/system.log
- Der Zeitraum mit den Zeitzoneninformationen, in dem die
404
-Fehler aufgetreten sind