Anda sedang melihat dokumentasi Apigee Edge.
Buka dokumentasi
Apigee X. info
Gejala
Aplikasi klien mendapatkan kode status HTTP 404 dengan pesan Not
Found dan pesan error Unable to identify proxy for host: VIRTUAL_HOST and
url: PATH sebagai respons terhadap panggilan API.
Error ini berarti Edge tidak dapat menemukan proxy API untuk jalur dan host virtual yang ditentukan.
Pesan error
Aplikasi klien mendapatkan kode respons berikut:
HTTP/1.1 404 Not Found
Selain itu, Anda mungkin melihat pesan error yang mirip dengan yang ditunjukkan di bawah ini:
{
"fault":{
"faultstring":"Unable to identify proxy for host: default and url: \/oauth2\/token",
"detail":{
"errorcode":"messaging.adaptors.http.flow.ApplicationNotFound"
}
}
}Kemungkinan penyebab
| Penyebab | Deskripsi | Petunjuk pemecahan masalah yang berlaku untuk |
|---|---|---|
| Host virtual dengan alias host duplikat | Beberapa host virtual memiliki alias host dan nomor port yang sama. | Pengguna Edge Public dan Private Cloud |
Langkah-langkah diagnosis umum
Log NGINX dan Message Processor akan berguna dalam memecahkan masalah error 404.
Gunakan langkah-langkah berikut untuk memeriksa log:
- Lihat log NGINX menggunakan perintah berikut:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Periksa kolom berikut dalam entri log:
Kolom Nilai Upstream_status, status404X-Apigee-fault-codemessaging.adaptors.http.flow.ApplicationNotFoundCatat ID pesan dari log.
- Periksa log Message Processor
(
/opt/apigee/var/log/edge-message-processor/logs/system.log)untuk melihat apakah Anda memilikimessaging.adaptors.http.flow.ApplicationNotFounduntuk API tertentu atau apakah Anda memiliki ID pesan unik dari langkah 2 untuk permintaan API.Contoh pesan error dari log Message Processor
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)
Log di atas menunjukkan kode error dan pesan error sebagai berikut:
code = messaging.adaptors.http.flow.ApplicationNotFound, message = Unable to identify proxy for host: vh1 and url: /weather
Penyebab: Beberapa host virtual dengan alias host dan nomor port yang sama
Router dan Pemroses Pesan Apigee Edge menggunakan header host, nomor port, dan jalur URI
untuk merutekan traffic ke proxy API yang benar. Memiliki definisi yang ambigu seperti beberapa host virtual
dengan alias host dan nomor port yang sama adalah anti-pola yang didokumentasikan dan
dapat menyebabkan perilaku yang tidak terduga. Salah satu error umum yang akan Anda lihat adalah error
404 dengan pesan Unable to identify proxy for host: VIRTUAL_HOST
and url: PATH.
Biasanya, jika ada beberapa host virtual dengan alias host yang sama, Anda akan melihat
error 404 yang terjadi sesekali. Hal ini karena Proxy API tertentu dapat dikonfigurasi
untuk menerima permintaan hanya di salah satu host virtual. Saat permintaan API dirutekan ke
host virtual tertentu yang dikonfigurasi di Proxy API, Anda akan mendapatkan respons yang berhasil.
Namun, jika permintaan API dirutekan ke host virtual lain yang tidak dikonfigurasi untuk menerima permintaan oleh Proxy API, maka API akan gagal dengan error 404 ini.
Ikuti petunjuk yang diberikan di
404 Unable to identify proxy for host: <virtual host name> and url: <path> dan
pecahkan masalah error ini. Jika tidak ada penyebab yang menyebabkan error ini, gunakan langkah-langkah di bawah untuk menentukan apakah host virtual dengan alias host duplikat menyebabkan error 404.
Diagnosis
Gunakan salah satu metode berikut untuk menentukan apakah ada beberapa host virtual yang memiliki
alias host/nomor port yang sama sehingga menyebabkan error 404:
- UI Edge
- API pengelolaan
UI Edge
Gunakan petunjuk ini untuk menentukan apakah ada beberapa host virtual yang memiliki alias host/nomor port yang sama menggunakan UI Edge.
Misalnya, jika Anda mengamati error 404 dengan URL
http://example.com:9001/proxy1, Anda harus menemukan host virtual mana yang memiliki
alias host example.com dan port 9001.
- Di Public Cloud dan UI Edge baru di Private Cloud:
- Pilih Admin.
- Pilih Virtual Host.
- Untuk setiap Environment, gunakan filter penelusuran untuk menentukan Virtual Hosts yang cocok dengan Host Alias tertentu yang digunakan untuk memanggil permintaan API.
- Jika Anda menemukan beberapa Host Virtual menggunakan Alias Host yang sama, buka Penyelesaian untuk menyelesaikan masalah ini.
Contoh:

- Di UI Klasik di Private Cloud:
- Pilih tab APIs .
- Pilih Konfigurasi Lingkungan.
- Pilih Virtual Host.
- Untuk setiap Lingkungan, lihat daftar Host Virtual untuk melihat apakah ada yang cocok dengan Alias Host tertentu yang digunakan untuk memanggil permintaan API.
- Jika Anda menemukan beberapa Host Virtual yang cocok dengan Alias Host yang sama, buka Penyelesaian untuk mengatasi masalah ini.
Contoh:

API pengelolaan
Gunakan petunjuk ini untuk menentukan apakah ada beberapa host virtual yang memiliki alias host/nomor port yang sama menggunakan Management API.
Dapatkan definisi setiap host virtual di setiap lingkungan dalam organisasi Anda untuk melihat host virtual mana yang memiliki alias host dan nomor port yang sama:
Misalnya, jika Anda melihat error
404dengan URLhttp://example.com:9001/proxy1, Anda harus menemukan host virtual mana yang memiliki alias hostexample.comdan port9001.Mendapatkan daftar lingkungan
Pengguna Cloud Publik:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
Pengguna Private Cloud:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
Dengan:
ORGANIZATION_NAME adalah nama organisasi
Contoh:
curl http://127.0.0.1:8080/v1/organizations/myorg/environments -u USERNAME
[ "prod", "test", "dev" ]
Mendapatkan daftar host virtual dalam lingkungan
Pengguna Cloud Publik:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
Pengguna Private Cloud:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
Dengan:
ORGANIZATION_NAME adalah nama organisasi
ENVIRONMENT_NAME adalah nama lingkungan
Contoh:
curl http://127.0.0.1:8080/v1/organizations/myorg/environments/test/virtualhosts -u USERNAME
[ "default" ]
Mendapatkan definisi setiap host virtual di lingkungan.
Pengguna Cloud Publik:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
Pengguna Private Cloud:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
Dengan:
ORGANIZATION_NAME adalah nama organisasi
ENVIRONMENT_NAME adalah nama lingkungan
VIRTUAL_HOST_NAME adalah nama host virtual
Contoh:
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" : [ ] }Ulangi dua langkah di atas untuk lingkungan lainnya di organisasi Anda.
Dalam contoh ini, ulangi langkah-langkah untuk lingkungan
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" : [ ] }Dalam contoh ini, Anda dapat melihat bahwa dua host virtual
defaultdi dua lingkungan yang berbeda,testdandev, keduanya berisi alias hostexample.comdan nomor port yang sama9001. Hal ini adalah penyebab error404.- Jika Anda menemukan beberapa Host Virtual yang cocok dengan Alias Host yang sama, buka Penyelesaian untuk mengatasi masalah ini.
Resolusi
- Pastikan setiap host virtual hanya berisi kombinasi alias host dan port yang unik.
- Jika Anda telah mengidentifikasi beberapa host virtual dengan kombinasi port dan alias host yang sama, maka Anda harus memperbaruinya dengan alias host yang unik.
- Anda dapat memperbarui setelan ini menggunakan Edge UI atau Management API. Petunjuknya dapat ditemukan di bagian Mengubah host virtual.
- Pastikan setiap alias host memiliki entri DNS yang tepat.
- Dalam contoh yang dibahas di atas, jika konfigurasi kita terlihat seperti ini:
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" : [ ] }- Anda dapat memperbarui host virtual yang salah sehingga tidak tumpang-tindih.
- Perbarui alias host sebagai
example2.com. - Pastikan alias host baru memiliki entri DNS yang serupa dengan alias host sebelumnya.
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" : [ ] }
- Lakukan panggilan API lagi ke proxy dan verifikasi bahwa Anda mendapatkan respons yang berhasil secara konsisten:
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" } }
- Jika masalah masih berlanjut, buka Informasi diagnostik yang harus dikumpulkan.
Harus mengumpulkan informasi diagnostik
Jika masalah berlanjut bahkan setelah mengikuti petunjuk di atas, kumpulkan informasi diagnostik berikut, lalu hubungi Dukungan Apigee Edge:
Jika Anda adalah pengguna Cloud Publik, berikan informasi berikut:
- Nama organisasi
- Nama lingkungan
- Nama Proxy API
- Selesaikan perintah
curluntuk mereproduksi error404 - Jika error
404tidak terjadi saat ini, berikan jangka waktu dengan informasi zona waktu saat error404terjadi di masa lalu.
Jika Anda adalah pengguna Private Cloud, berikan informasi berikut:
- Pesan error lengkap yang diamati untuk permintaan yang gagal
- Nama Organisasi, Lingkungan, dan Proxy API yang Anda amati
404errornya - Paket Proxy API
- Log akses NGINX
/opt/apigee/var/log/edge-router/nginx/ORGANIZATION_NAME~ENVIRONMENT_NAME.PORT#_access_log - Log Message Processor
/opt/apigee/var/log/edge-message-processor/logs/system.log - Jangka waktu dengan informasi zona waktu saat terjadi error
404