Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione
Documentazione di Apigee X. Informazioni
Sintomo
L'applicazione client riceve un codice di stato HTTP 404
con il messaggio Not
Found
e il messaggio di errore Unable to identify proxy for host: VIRTUAL_HOST and
url: PATH
in risposta alle chiamate API.
Questo errore significa che Edge non è riuscito a trovare il proxy API per l'host virtuale e il percorso specificati.
Messaggio di errore
L'applicazione client riceve il seguente codice di risposta:
HTTP/1.1 404 Not Found
Inoltre, potresti visualizzare un messaggio di errore simile a quello mostrato di seguito:
{ "fault":{ "faultstring":"Unable to identify proxy for host: default and url: \/oauth2\/token", "detail":{ "errorcode":"messaging.adaptors.http.flow.ApplicationNotFound" } } }
Possibili cause
Causa | Descrizione | Le istruzioni di risoluzione dei problemi applicabili a |
---|---|---|
Host virtuale con alias host duplicato | Più host virtuali hanno lo stesso alias host e lo stesso numero di porta. | Utenti perimetrali di cloud pubblici e privati |
Passaggi diagnostici comuni
I log di NGINX e del processore di messaggi saranno utili per la risoluzione dell'errore 404
.
Per controllare i log:
- Visualizza i log NGINX utilizzando il seguente comando:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Verifica la presenza dei seguenti campi nelle voci di log:
Campo Valore Upstream_status, status
404
X-Apigee-fault-code
messaging.adaptors.http.flow.ApplicationNotFound
Prendi nota dell'ID messaggio dei log.
- Controllare i log del processore di messaggi
(
/opt/apigee/var/log/edge-message-processor/logs/system.log)
per sapere se averemessaging.adaptors.http.flow.ApplicationNotFound
per l'API specifica o se disponi dell'attributo l'ID messaggio del passaggio 2 per la richiesta API.Esempio di messaggio di errore dal log del processore di messaggi
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)
Il log riportato sopra mostra il codice e il messaggio di errore seguenti:
code = messaging.adaptors.http.flow.ApplicationNotFound, message = Unable to identify proxy for host: vh1 and url: /weather
Causa: più host virtuali con lo stesso alias host e numero di porta
I router e i processori di messaggi Apigee Edge utilizzano sia l'intestazione host, il numero di porta e i percorsi degli URI
per indirizzare il traffico al proxy API corretto. Avere definizioni ambigue come la presenza di più istanze
host con lo stesso alias host e numero di porta è una documentazione
anti-pattern e
può portare a comportamenti imprevisti. Uno degli errori più comuni che osserverai è la
404
errore con il messaggio Unable to identify proxy for host: VIRTUAL_HOST
and url: PATH
.
In genere, se esistono più host virtuali con lo stesso alias host, osserverai
404
errori intermittenti. Questo perché è possibile configurare il proxy API specifico
per accettare le richieste solo su uno degli host virtuali. Quando le richieste API vengono instradate
un host virtuale specifico configurato nel proxy API, riceverai una risposta positiva.
Tuttavia, quando le richieste API vengono instradate agli altri host virtuali a cui viene inviato
non configurato per accettare le richieste, le API avranno esito negativo con questi 404
errori.
Segui le istruzioni fornite in
404 Impossibile identificare il proxy per l'host: <nome host virtuale> e url: <path> e
risolvi questo errore. Se l'errore non è tra le cause, segui la procedura indicata
di seguito per determinare se gli host virtuali con alias host duplicati causano 404
errori.
Diagnosi
Utilizza uno dei seguenti metodi per determinare se sono presenti più host virtuali con
stesso alias host/porta # che genera 404
errori:
- UI Edge
- API di gestione
UI Edge
Utilizza queste istruzioni per determinare se sono presenti più host virtuali con lo stesso host utilizzando l'interfaccia utente Edge.
Ad esempio, se hai osservato l'errore 404
con l'URL
http://example.com:9001/proxy1
, dovrai individuare gli host virtuali che
l'alias host example.com
e la porta 9001
.
- In Cloud pubblico e nella nuova UI perimetrale su cloud privato:
- .
- Seleziona Amministrazione.
- Seleziona Host virtuali.
- Per ogni Ambiente, utilizza il filtro di ricerca per determinare la Host che corrispondono allo specifico alias host con cui l'API richieste sono state richiamate.
- Se trovi più host virtuali che utilizzano lo stesso alias host, vai a Risoluzione per risolvere il problema.
Ad esempio:
- In UI classica su cloud privato:
- .
- Seleziona la scheda API .
- Seleziona Configurazione dell'ambiente.
- Seleziona Host virtuali.
- Per ogni Ambiente, visualizza l'elenco di Host virtuali per verificare se esistono corrispondenze. L'alias host specifico con cui sono state richiamate le richieste API.
- Se trovi più host virtuali corrispondenti allo stesso alias host, vai a Risoluzione per risolvere il problema.
Ad esempio:
API di gestione
Utilizza queste istruzioni per determinare se sono presenti più host virtuali con lo stesso host utilizzando le API di gestione.
Ottieni la definizione di ciascun host virtuale in ciascuno degli ambienti nella tua per vedere quali host virtuali hanno lo stesso alias host e numero di porta:
Ad esempio, se hai osservato l'errore
404
con l'URLhttp://example.com:9001/proxy1
, dovrai trovare le risorse virtuali gli host hanno l'alias hostexample.com
e la porta9001
.Ottieni l'elenco degli ambienti
Utente cloud pubblico:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
Utente Private Cloud:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
Dove:
ORGANIZATION_NAME è il nome dell'organizzazione
Esempio:
curl http://127.0.0.1:8080/v1/organizations/myorg/environments -u USERNAME
[ "prod", "test", "dev" ]
recupera l'elenco degli host virtuali in un ambiente
Utente cloud pubblico:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
Utente Private Cloud:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
Dove:
ORGANIZATION_NAME è il nome dell'organizzazione
ENVIRONMENT_NAME è il nome dell'ambiente
Esempio:
curl http://127.0.0.1:8080/v1/organizations/myorg/environments/test/virtualhosts -u USERNAME
[ "default" ]
Ottieni la definizione di ciascun host virtuale nell'ambiente.
Utente cloud pubblico:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
Utente Private Cloud:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
Dove:
ORGANIZATION_NAME è il nome dell'organizzazione
ENVIRONMENT_NAME è il nome dell'ambiente
VIRTUAL_HOST_NAME è il nome dell'host virtuale
Esempio:
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" : [ ] }
Ripeti i due passaggi precedenti per gli altri ambienti dell'organizzazione.
In questo esempio, ripeti i passaggi per l'ambiente
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 questo esempio puoi vedere che i due host virtuali
default
in due diversi ambienti,test
edev
, entrambi Contenere lo stesso alias hostexample.com
e lo stesso numero di porta9001
. Questa è la causa degli errori di404
.- Se trovi più host virtuali corrispondenti allo stesso alias host, vai a Risoluzione per risolvere il problema.
Risoluzione
- Assicurati che ogni host virtuale contenga solo combinazioni univoche di alias host e porta.
- Se hai identificato più host virtuali con le stesse combinazioni di alias host e porta devi aggiornarli con un alias host univoco.
- Puoi aggiornarli utilizzando l'UI Edge o l'API di gestione (puoi trovare le istruzioni) sotto Modifica di un host virtuale.
- Verifica che ogni alias host abbia una voce DNS corretta.
- Nell'esempio illustrato sopra, se la nostra configurazione era simile alla seguente:
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" : [ ] }
- Puoi aggiornare l'host virtuale errato in modo che non si sovrappongano.
- In questo modo, l'alias host viene aggiornato come
example2.com
. - Assicurati che il nuovo alias host abbia una voce DNS simile a quella dell'alias host precedente.
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" : [ ] }
- Effettua nuovamente le chiamate API al proxy e verifica di ricevere in modo costante le risposte positive:
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" } }
- Se il problema persiste, consulta l'articolo È necessario raccogliere i dati diagnostici.
Raccogliere dati diagnostici
Se il problema persiste anche dopo aver seguito le istruzioni riportate sopra, raccogli i seguenti dati informazioni diagnostiche e contattare l'assistenza Apigee Edge:
Se sei un utente del cloud pubblico, fornisci le seguenti informazioni:
- Nome organizzazione
- Nome ambiente
- Nome proxy API
- Completa il comando
curl
per riprodurre l'errore404
- Se al momento gli errori
404
non si verificano, indica il periodo di tempo con le informazioni sul fuso orario quando si sono verificati404
errori in passato.
Se sei un utente di Private Cloud, fornisci le seguenti informazioni:
- Messaggio di errore completo osservato per le richieste non riuscite
- Organizzazione, Nome ambiente e Nome proxy API che stai esaminando.
404
errore - Bundle proxy API
- Log di accesso NGINX
/opt/apigee/var/log/edge-router/nginx/ORGANIZATION_NAME~ENVIRONMENT_NAME.PORT#_access_log
- Log del processore di messaggi
/opt/apigee/var/log/edge-message-processor/logs/system.log
- Il periodo di tempo con le informazioni sul fuso orario in cui si sono verificati gli errori
404