Stai visualizzando la documentazione di Apigee Edge.
Vai alla
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 indica 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, potrebbe essere visualizzato 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 | Istruzioni per la risoluzione dei problemi applicabili a |
---|---|---|
Host virtuale con alias host duplicato | Più host virtuali hanno lo stesso alias host e numero di porta. | Utenti di cloud pubblico e privato perimetrale |
Passaggi di diagnosi più 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
- Controlla i 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.
- Controlla i log del processore di messaggi (
/opt/apigee/var/log/edge-message-processor/logs/system.log)
per verificare se haimessaging.adaptors.http.flow.ApplicationNotFound
per l'API specifica o se disponi dell'ID messaggio univoco del passaggio 2 per la richiesta API.Esempio di messaggio di errore del 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 come segue:
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 dell'host, il numero di porta e i percorsi URI per instradare il traffico al proxy API corretto. Avere definizioni ambigue come più host virtuali con lo stesso alias host e lo stesso numero di porta è un anti-pattern documentato e può portare a comportamenti imprevisti. Uno degli errori più comuni che noterai è un errore 404
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, si verificheranno errori 404
intermittenti. Questo perché il proxy API specifico può essere configurato in modo da accettare le richieste solo su uno degli host virtuali. Quando le richieste API vengono instradate all'host virtuale specifico configurato nel proxy API, riceverai una risposta corretta.
Tuttavia, se le richieste API vengono instradate ad altri host virtuali a cui il proxy API non è configurato per accettare le richieste, le API non riusciranno e restituiranno gli errori 404
.
Segui le istruzioni fornite nella sezione
404 Impossibile identificare il proxy per l'host: <nome host virtuale> e url: <percorso>
e risolvi questo errore. Se nessuna delle cause genera questo errore, segui i passaggi riportati di seguito per determinare se gli errori 404
sono causati da host virtuali con alias host duplicati.
Diagnostica
Utilizza uno dei seguenti metodi per determinare se sono presenti più host virtuali che hanno lo stesso alias host/numero di porta che genera errori 404
:
- UI perimetrale
- API di gestione
UI perimetrale
Segui queste istruzioni per determinare se sono presenti più host virtuali che hanno lo stesso alias di porta o lo stesso numero di porta utilizzando l'interfaccia utente perimetrale.
Ad esempio, se hai notato l'errore 404
con l'URL
http://example.com:9001/proxy1
, devi trovare quali host virtuali hanno
l'alias host example.com
e la porta 9001
.
- In Cloud pubblico e nella nuova UI Edge su Private Cloud:
- Seleziona Amministrazione.
- Seleziona Host virtuali.
- Per ogni ambiente, utilizza il filtro di ricerca per determinare gli host virtuali che corrispondono allo specifico alias host con cui sono state richiamate le richieste API.
- Se trovi più host virtuali che utilizzano lo stesso alias host, vai alla sezione 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 ciascun ambiente, visualizza l'elenco degli host virtuali per vedere se corrispondono all'alias host specifico con cui sono state richiamate le richieste API.
- Se trovi più host virtuali che corrispondono allo stesso alias host, vai alla sezione Risoluzione per risolvere il problema.
Ad esempio:
API di gestione
Utilizza queste istruzioni per determinare se sono presenti più host virtuali che hanno lo stesso alias di porta o lo stesso numero di porta utilizzando le API di gestione.
Ottieni la definizione di ciascuno degli host virtuali in ciascuno degli ambienti della tua organizzazione per vedere quali host virtuali hanno lo stesso alias host e lo stesso numero di porta:
Ad esempio, se hai notato l'errore
404
con l'URLhttp://example.com:9001/proxy1
, devi trovare quali host virtuali hanno l'alias hostexample.com
e la porta9001
.Recupera l'elenco degli ambienti
Utente del 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" ]
Recupero dell'elenco di host virtuali in un ambiente
Utente del 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 ciascuno degli host virtuali nell'ambiente.
Utente del 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 della tua 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 ambienti diversi,test
edev
, contengono entrambi lo stesso alias hostexample.com
e numero di porta9001
. Questa è la causa di404
errori.- Se trovi più host virtuali che corrispondono allo stesso alias host, vai alla sezione 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 porte, devi aggiornarli con un alias host univoco.
- Puoi aggiornare queste impostazioni utilizzando l'interfaccia utente perimetrale o l'API di gestione. Le istruzioni sono disponibili nella sezione Modificare un host virtuale.
- Assicurati che ogni alias host abbia una voce DNS corretta.
- Nell'esempio visto 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 verrà 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" : [ ] }
- Ripeti le chiamate API al proxy e verifica di ricevere regolarmente risposte corrette:
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 la pagina Devi raccogliere dati diagnostici.
Devi raccogliere dati diagnostici
Se il problema persiste anche dopo aver seguito le istruzioni riportate sopra, raccogli le seguenti informazioni diagnostiche e contatta l'assistenza Apigee Edge:
Se sei un utente del cloud pubblico, fornisci le seguenti informazioni:
- Nome dell'organizzazione.
- Nome ambiente
- Nome proxy API
- Completa il comando
curl
per riprodurre l'errore404
- Se al momento gli errori
404
non si verificano, fornisci il periodo di tempo con le informazioni sul fuso orario in cui si sono verificati404
errori in passato.
Se sei un utente Private Cloud, fornisci le seguenti informazioni:
- Messaggio di errore completo osservato per le richieste non riuscite
- Organizzazione, nome dell'ambiente e nome del proxy API per cui stai osservando
404
errori - Bundle del proxy API
- Log degli accessi 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 è verificato l'errore
404