<ph type="x-smartling-placeholder"></ph>
Sie sehen die Dokumentation zu Apigee Edge.
Gehen Sie 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 den angegebenen Pfad nicht finden konnte.
Fehlermeldung
Die Clientanwendung erhält den folgenden Antwortcode:
HTTP/1.1 404 Not Found
Außerdem kann eine Fehlermeldung wie die folgende angezeigt werden:
{ "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. | Edge-Nutzer von öffentlichen und privaten Clouds |
Allgemeine Diagnoseschritte
NGINX- und Message Processor-Logs sind bei der Behebung des Fehlers 404
hilfreich.
Führen Sie die folgenden Schritte aus, um die Logs zu prüfen:
- 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.
- Message Processor-Logs prüfen
(
/opt/apigee/var/log/edge-message-processor/logs/system.log)
, um zu sehen, ob dumessaging.adaptors.http.flow.ApplicationNotFound
für die jeweilige API oder wenn Sie die eindeutige Nachrichten-ID aus Schritt 2 für die API-Anfrage.Beispiel für eine 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)
Im Protokoll oben sehen Sie den Fehlercode und die folgende Fehlermeldung:
code = messaging.adaptors.http.flow.ApplicationNotFound, message = Unable to identify proxy for host: vh1 and url: /weather
Ursache: Mehrere virtuelle Hosts mit demselben Host-Alias und derselben Portnummer
Apigee Edge-Router und Nachrichtenprozessoren verwenden sowohl den Host-Header, die Portnummer als auch die URI-Pfade
um Traffic an den richtigen API-Proxy weiterzuleiten. Mehrdeutige Definitionen, z. B. mehrere virtuelle
mit demselben Host-Alias und derselben Portnummer
Anti-Pattern und
zu unerwartetem Verhalten führen. Einer der häufigsten Fehler, den Sie feststellen werden, ist ein
404
-Fehler mit der Meldung Unable to identify proxy for host: VIRTUAL_HOST
and url: PATH
.
Wenn mehrere virtuelle Hosts mit demselben Host-Alias existieren, beobachten Sie in der Regel,
vorübergehende 404
-Fehler. Dies liegt daran, dass der spezifische API-Proxy möglicherweise konfiguriert ist.
um die Anfragen nur auf einem
der virtuellen Hosts zu akzeptieren. Wenn die API-Anfragen an den
virtuellen Hosts konfiguriert haben, der im API-Proxy konfiguriert ist, 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 diesen 404
fehl.
Fehler.
Befolgen Sie die Anweisungen unter
<ph type="x-smartling-placeholder"></ph>
404 Proxy für Host kann nicht identifiziert werden: <virtual host name> und URL: <path> und
diesen Fehler zu beheben. Wenn keiner der Ursachen zu diesem Fehler führt, führen Sie die Schritte aus
unten, um festzustellen, ob virtuelle Hosts mit doppelten Host-Aliassen den 404
verursachen.
Fehler.
Diagnose
Verwenden Sie eine der folgenden Methoden, um festzustellen, ob mehrere virtuelle Hosts mit dem
Gleicher Hostalias/gleicher Port #, was zu 404
-Fehlern führt:
- Edge-Benutzeroberfläche
- Verwaltungs-APIs
Edge-Benutzeroberfläche
<ph type="x-smartling-placeholder">Anhand dieser Anleitung können Sie feststellen, ob es mehrere virtuelle Hosts mit demselben Host gibt Alias-/Portnummer über die Edge-Benutzeroberfläche.
Wenn beispielsweise der Fehler 404
bei der URL
http://example.com:9001/proxy1
haben, müssen Sie herausfinden, welche virtuellen Hosts
Host-Alias example.com
und Port 9001
.
- In der öffentlichen Cloud und der neuen Edge-Benutzeroberfläche in der Private Cloud:
<ph type="x-smartling-placeholder">
- </ph>
- Wählen Sie Verwalten.
- Wählen Sie Virtual Hosts aus.
- Verwenden Sie für jede Environment den Suchfilter, um die Virtual Hosts, die dem spezifischen Host-Alias entsprechen, mit dem die API -Anfragen aufgerufen wurden.
- Wenn Sie mehrere virtuelle Hosts mit demselben Host-Alias finden, gehen Sie zu Lösung, um das Problem zu beheben.
Beispiel:
- Unter Klassische UI in Private Cloud:
<ph type="x-smartling-placeholder">
- </ph>
- Wählen Sie den Tab APIs aus.
- Wählen Sie Umgebungskonfiguration aus.
- Wählen Sie Virtual Hosts aus.
- Rufen Sie für jede Environment die Liste der virtuellen Hosts auf, um festzustellen, ob eine Übereinstimmung vorhanden ist. Den spezifischen Host-Alias, über den die API-Anfragen aufgerufen wurden.
- Wenn Sie mehrere virtuelle Hosts finden, die mit demselben Host-Alias übereinstimmen, gehen Sie zu Lösung, um das Problem zu beheben.
Beispiel:
Verwaltungs-APIs
<ph type="x-smartling-placeholder">Anhand dieser Anleitung können Sie feststellen, ob es mehrere virtuelle Hosts mit demselben Host gibt Alias/Port-Nr. über die Management-APIs.
Rufen Sie die Definition jedes virtuellen Hosts in jeder der Umgebungen in Ihrem Organisationen, um zu sehen, welche virtuellen Hosts denselben Host-Alias und dieselbe Portnummer haben:
Wenn beispielsweise der Fehler
404
bei der URLhttp://example.com:9001/proxy1
, müssen Sie herausfinden, Hosts haben den Hostaliasexample.com
und den Port9001
.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 jedes 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 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
, enthalten denselben Hostaliasexample.com
und dieselbe Portnummer9001
Dies ist die Ursache für404
-Fehler.- Wenn Sie mehrere virtuelle Hosts finden, die mit demselben Host-Alias übereinstimmen, gehen Sie zu Lösung, um das Problem zu beheben.
Auflösung
- Achten Sie darauf, dass jeder virtuelle Host nur eindeutige Kombinationen aus Host-Alias und Port enthält.
- Wenn Sie mehrere virtuelle Hosts mit denselben Kombinationen aus Hostalias und Port identifiziert haben müssen Sie sie mit einem eindeutigen Host-Alias aktualisieren.
- Sie können diese mit der Edge-Benutzeroberfläche oder der Management API aktualisieren. Eine Anleitung dazu finden Sie unter Virtuellen Host ändern.
- Achten Sie darauf, dass jeder Host-Alias einen korrekten DNS-Eintrag hat. <ph type="x-smartling-placeholder">
- In dem oben beschriebenen Beispiel würde Ihre Konfiguration so aussehen:
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.
- Aktualisieren Sie den Hostalias als
example2.com
. - Der neue Host-Alias muss einen ähnlichen DNS-Eintrag wie der vorherige Host-Alias haben.
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" : [ ] }
- Senden Sie die API-Aufrufe erneut an den Proxy 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 trotz Befolgung der obigen Anleitung weiterhin besteht, stellen Sie Folgendes zusammen: 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
- API-Proxy-Name
- Führen Sie den
curl
-Befehl aus, um den404
-Fehler zu reproduzieren - Zeitraum angeben, falls die
404
Fehler derzeit nicht auftreten durch die Zeitzoneninformationen, wenn404
-Fehler in der Vergangenheit aufgetreten sind.
Wenn Sie ein Private Cloud-Nutzer sind, geben Sie die folgenden Informationen an:
- Vollständige Fehlermeldung für fehlgeschlagene Anfragen
- Organisation, Umgebungsname und API-Proxy-Name, den Sie beobachten
404
Fehler - 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